2012-04-12 11 views
0

gl_Normalから頂点シェーダで頂点ノーマルを取得できることはわかっています。GLSLのフラグメントシェーダでフラグメントの最初の頂点ノーマルを取得する方法

ここで、フラグメントの色を最初の頂点の頂点法線に設定します。私はどうすればそれをすることができるのか尋ねてもいい?フラグメントに含まれる頂点の数と、フラグメントシェーダーの各頂点の位置と法線は何ですか?

答えて

3

あなたが聞いたことは、それほど可能ではありませんが、あなたは十分に近づくことができるかもしれません。

プリミティブの「最初の頂点」から法線を取得することはできません。あなたができることは頂点シェーダの法線をフラグメントシェーダにさまざまな形で渡すことですが、各フラグメントはポリゴンの各頂点から補間される法線を取得します。

フラグメントシェーダから頂点の特定のプロパティにアクセスすることはできません。補間された値のみにアクセスできます。私はいくつかのケースで正しくない可能性がありますように

== EDITの==

が見える、コメントは下記を参照してください。

+1

しかし、実際には三角形全体の単一の頂点の値を使用する 'flat'を補間するように定義することはできますが、最初か最後か未定義かどうかはわかりません。しかし、これは新しいGLSLのバージョンでのみ利用可能です、私は(GL 3 +多分)だと思います。 –

+0

@ChristianRauありがとう、それを知らなかった。デフォルトでは最後の頂点のように見えます。*プリミティブの刺激的な頂点は、フラットシェーディングが有効なときに一定の第1および第2の色を決定する頂点です。 OpenGLでは、triangle、quad、line、および (簡単に言えば)ポイントプリミティブのための刺激的な頂点は、 プリミティブをアセンブルするために使用される最後の頂点です。ポリゴンプリミティブは、OpenGLでは例外です。 ポリゴンプリミティブの最初の頂点は、実際には三角形や四角形に分割されていても、 ポリゴンの色を決定します。* – Tim

+0

呼び出すglProvokingVertex(GL_LAST_VERTEX_CONVENTION) OGL 3.2以降のバージョンで使用できます。 – debonair