使用 glTexCoordPointer() 的问题
Issue using 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()
行就看不到额外的四边形。
来自docs:
count
Specifies the number of indices to be rendered.
因此你必须调用 glDrawArrays(GL_QUADS, 0, 4);
请注意,从 OpenGL 3.1 开始,GL_QUADS
不再受正式支持。
我是 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()
行就看不到额外的四边形。
来自docs:
count
Specifies the number of indices to be rendered.
因此你必须调用 glDrawArrays(GL_QUADS, 0, 4);
请注意,从 OpenGL 3.1 开始,GL_QUADS
不再受正式支持。