2010-12-01 8 views
14

私は約1年間OpenGLを使って作業していましたが、多くのことを学びました。残念なことに、私がそれを学んだのは、以前の3.xのやり方で、即時モード、デフォルトのシェーダ、行列スタックなどを意味していました。しかし、OpenGLの仕様を見れば、私は物事を行う新しい方法のいくつかを完全には理解していません。OpenGL 3.1-4.1新しく廃止された機能

私が理解しているように、彼らは行列スタックをなくしました。つまり、あなた自身の変換行列を追跡する必要があります。複雑ではないようです。彼らはまた即時モードを取り除きました。つまり、ピクセル/ノーマル/テクスチャなどを送信するVBOまたはVAO(どちらがどちらか、おそらく両方がわからない)を使用する必要があります。情報をシェーダプログラムに送る。私は実際にこれらのオブジェクトの仕組みを理解することはできません。すべての情報をそれらに入れる必要があると思いますし、ピクセル、ノーマル、およびテクスチャ座標の間にセパレータを表示するようなものを提供します。誰かがこれが実際にどのように機能するかを簡単に説明することができますか(それを説明するリンクを私に送ってください)?私はウィキペディアを試して、それをグーグルでやっていましたが、それでもまだそれを理解していませんでした。

私が知りたいと思っているもう一つのポイントは、シェイダーです。私はそれらをコード化する方法を尋ねるつもりはない、ちょうどそこに入る必要があり、openglがあなたのために何をするのか。具体的には、基本レンダリングプログラムを得るためにシェーダで何をする必要がありますか?実際の頂点の位置を計算するには、すべての結びつき計算を行い、行列を使用する必要があることは分かっています。しかし、OpenGLはバックフェールのカリング、ラインクリッピング、ポリゴンの塗りつぶし、その他の低レベルの問題を処理していますか、シェーダにあなたのコードをコード化する必要がありますか?

答えて

9

即時モードは非推奨であるため、「hello triangle」アプリケーションはもう少し複雑です。

http://arcsynthesis.org/gltut/

あなたは徹底的にそれを読む必要があります。ここに、現代のOpenGLの良いチュートリアルがあります。それはVAOを使用しないので、後で別の場所でVAOを読む必要があることを覚えておいてください。 VAOは物事をあまり変えないので、言及されたチュートリアルからそれらを使用することを知らせる必要はありません。

あなたの2番目の質問について...あなたの頂点シェーダは、すべての頂点についてOpenGLによって実行されます。あなたの仕事は、頂点の最終的な位置を計算し、フラグメントシェーダに送信されるデータ(ノーマル、ライトデータなど)を準備することです。シェーダに送る頂点やその他のデータの属性が与えられます(ユニフォーム - それはチュートリアルで)。フラグメントシェーダはフラグメントごとに実行され、各フラグメントの最終的な色を計算するフラグメントシェーダで実行されます。

あなたはここで見ることができます:

http://www.opengl.org/sdk/docs/man4/

glPolygonModeとglCullFace、のようなものが残っているということ。

+0

返信いただきありがとうございます。私は確かにチャンスを得ると、そのリンクを見ています。あなたが書いたもののように、エッチシェイダーが何をすべきか分かっていました。あなたが何を描くべきかを決定しなければならないか、あるいはOpenGLがまだそれをあなたのためにしたのかどうかは分かりませんでした。あなた自身(これは、神様に感謝しているようです)。非常に有益な答え+1 – Zepee

+0

あなたは歓迎です – Bojan

+0

チュートリアルへのあなたのリンクは今壊れています。 – Ruslan

関連する問題