所以我使用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添加参数,我用'???'标记而且我也想知道我是否允许将纹理坐标表示为2d数组,就像我在第一时间那样。
答案 0 :(得分: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);
我也想知道我是否允许将纹理坐标表示为2d数组,就像我在第一时间那样。
如果你按照上面的方式编写它,即使用静态分配的数组,那么是的,因为C标准断言元素将被紧密地打包在内存中。但是,如果使用动态分配的指针数组,则为no。