0

所以我使用 glBegin(GL_QUADS) 创建了一个四边形,然后绘制顶点,现在我想将纹理坐标数组传递到我的着色器中,以便我可以将纹理应用于我的四边形。

所以我在语法正确时遇到了一些麻烦。

首先,我制作了一个二维数组值

GLfloat coords[4][2];
coords[0][0] = 0;
coords[0][1] = 0;
coords[1][0] = 1;
coords[1][1] = 0;
coords[2][0] = 1;
coords[2][1] = 1;
coords[3][0] = 0;
coords[3][1] = 1;

然后我尝试将它放入我的着色器中,其中我有一个属性 vec2 texcoordIn

GLint texcoord = glGetAttribLocation(shader->programID(), "texcoordIn");
glEnableVertexAttribArray(texcoord);
glVertexAttribPointer(texcoord, ???, GL_FLOAT, ???, ???, coords);

所以我很困惑我应该为我标记为'???'的glVertexAttribPointer的参数输入什么 而且我还想知道是否允许我将纹理坐标表示为二维数组,就像我最初所做的那样。

4

1 回答 1

0

正确的值是

glVertexAttribPointer(
 texcoord,
 2, /* two components per element */
 GL_FLOAT,
 GL_FALSE, /* don't normalize, has no effect for floats */
 0, /* distance between elements in sizeof(char), or 0 if tightly packed */
 coords);

而且我还想知道是否允许我将纹理坐标表示为二维数组,就像我最初所做的那样。

如果您按照上面的方式编写它,即使用静态分配的数组,那么是的,因为 C 标准断言元素将紧密地打包在内存中。但是,如果使用动态分配的指针数组,则不会。

于 2013-02-08T14:25:09.640 回答