0

長方形の 2 つのパッチを描画しようとしています (テッセレーション用)。それらを 0,0 から 1,1 に、その他を 1,0 から 2,1 に描画したいと考えています。

GL_PATCHES を使用してクワッドをグラフィックス パイプラインに送信しています

同次座標の私の頂点データは

float vertices[32] = {
0.0, 0.0, 0.0, 1.0, //1st rec
1.0, 0.0, 0.0, 1.0,
1.0, 1.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
  1.0, 0.0, 0.0, 1.0, //2nd rec
  2.0, 0.0, 0.0, 1.0,
  2.0, 1.0, 0.0, 1.0,
  1.0, 1.0, 0.0, 1.0
   };

そしてC++コードで

glPatchParameteri(GL_PATCH_VERTICES, 4);
glDrawArraysInstanced(GL_PATCHES, 0, 4, 2);

しかし、画面上に 0,0 から 1,1 までの長方形パッチが 1 つしか表示されません。2番目の長方形を描画しない理由がわかりません

私のテッセレーション評価シェーダーは

vec4 vert= vec4(0.0, 0.0, 0.0, 1.0);
vert.x = gl_in[0].gl_Position.x + gl_TessCoord.x;
vert.y = gl_in[0].gl_Position.y + gl_TessCoord.y;

この頂点を vec4 に変換して gl_Position に渡します

4

1 に答える 1

2

glDrawArraysInstanced は、指定されたデータの複数のインスタンスを描画します。あなたの場合、頂点0から4の2倍を描画します。これにより、同じ位置にある2つのクワッドが得られます。

代わりに glDrawArrays(GL_PATCHES, 0, 8) を使用することをお勧めしますが、描画呼び出しを保持し、gl_InstanceIDに従って頂点シェーダーで変換することもできます。

于 2014-12-16T09:06:28.480 に答える