0

我正在尝试绘制两个矩形块(用于镶嵌),我想将它们从 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 的矩形补丁。我不明白为什么它不绘制第二个矩形

我的镶嵌评估着色器是

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;

我将此vert转换为vec4并将其传递给gl_Position

4

1 回答 1

2

glDrawArraysInstanced 绘制指定数据的几个实例。在您的情况下,它绘制了顶点 0 到 4 的两倍,这使您有两个位于同一位置的四边形。

我建议您简单地使用 glDrawArrays(GL_PATCHES, 0, 8) 代替,但您也可以根据gl_InstanceID保留您的绘图调用并在顶点着色器中进行转换。

于 2014-12-16T09:06:28.480 回答