使用 glTexCoordPointer() 时出现问题



我对OpenGL(和GLSL(相当陌生,我在使用glTexCoordPointer()时遇到了问题。

我加载了纹理,它在对象上正确渲染(单个四边形(,但我也出现了另一个四边形,它是单一颜色而不是加载纹理的一部分。

数组定义如下:

static const GLfloat obj_vert_buf[] = {
    -1, 0, -1,
    -1, 0, 1,
    1, 0, 1,
    1, 0, -1
};
static const GLfloat obj_tex_buf[] = {
    0, 0, 
    0, 1, 
    1, 1,
    1, 0
};

以及绘制函数的相关摘录:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY_EXT);
glGenBuffers(1, &obj_id);
glTexCoordPointer(2, GL_FLOAT, 0, obj_tex_buf);
glVertexPointer(3, GL_FLOAT, 0, obj_vert_buf);
glDrawArrays(GL_QUADS, 0, sizeof(obj_vert_buf) / sizeof(GLfloat));
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY_EXT);

据我了解glTexCoordPointer()的第一个参数指定了每个顶点的元素数量,即两个,如下所示:

glTexCoord2f(0.0, 0.0);

第二个参数是类型,GLfloat

第三个参数是与每个顶点相关的每组元素之间的偏移量,因此在前面所述的两个元素之后为零(我也尝试过2 * sizeof(GLfloat)没有变化(。

第四个参数是指向数据开头的指针,即 obj_tex_buf .

四边形渲染正确,纹理在其上绘制正确,但我从其中心得到另一个随机形状并且纹理不正确,任何想法都会很棒。如果没有glTexCoordPointer()线,则不可见额外的四边形。

从文档中:

count
Specifies the number of indices to be rendered.

因此,您必须致电glDrawArrays(GL_QUADS, 0, 4);

请注意,从OpenGL 3.1开始,GL_QUADS不再得到官方支持。

相关内容

  • 没有找到相关文章