使用glTexCoordPointer()的问题

时间:2018-05-01 13:09:47

标签: c++ opengl texturing

我是 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()行,则无法看到其他四边形。

1 个答案:

答案 0 :(得分:0)

来自docs

count
Specifies the number of indices to be rendered.

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

请注意,自Ope​​nGL 3.1起,GL_QUADS不再受到官方支持。