0

gl_PrimitiveIDレンダリングされたプリミティブの数を数えているようです。これは、フラグメントシェーダーとジオメトリシェーダーの両方で利用できるようです。

これは、シーン全体ではなく、ビュー錐台でレンダリングされた三角形の正確な数になりますか(プリミティブIDは線と点にも適用されるため、トリスのみを想定)?

4

1 に答える 1

4

変数はgl_PrimitiveIDジオメトリ シェーダーから出力され、フラグメント シェーダーに渡されます。ジオメトリ シェーダーが存在しない場合、フラグメント シェーダーgl_PrimitiveIDは、現在のレンダリング呼び出しで処理されたプリミティブの数です。つまり、頂点処理パイプラインを介して送信されるポイント/ライン/三角形の数です。呼び出すと、半開きの範囲 [0, 11)glDrawArrays(GL_TRIANGLES, 0, 33);が得られます。gl_PrimitiveID

ジオメトリ シェーダー存在する場合gl_PrimitiveIDは、GS から出力した値を受け取ります。GS が存在し、値を書き込まない場合、フラグメント シェーダーは未定義の値を取得します。標準の OpenGL 動作を得るために、書き込む頂点ごとにコピーgl_PrimitiveIDInするだけでよいことに注意してください。gl_PrimitiveID

つまり、視錐台カリングは考慮されていません。あなたのGSが実際に三角形ごとの錐台カリングを表示しない限り、そうではありません(そして私はそれをお勧めします)。

于 2012-10-01T00:01:36.310 に答える