c++ - 使用 glTexCoordPointer() 的问题

标签 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() 行,额外的四边形是不可见的。

最佳答案

来自docs :

count
Specifies the number of indices to be rendered.

因此你必须调用 glDrawArrays(GL_QUADS, 0, 4);

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

关于c++ - 使用 glTexCoordPointer() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50117079/

相关文章:

c# - 在非托管 C++ 代码中使用 C# 属性

c++ - 在 Linux 上定位 etc 和共享目录

c++ - glutWarpPointer 崩溃

c++ - OpenGL 3.2 纹理问题

c++ - OpenGL,着色器模型 3.3 纹理 : Black Textures?

python - 对 3D 图形(圆柱体)进行纹理处理

c++ - 模板类的嵌套类中的Friend运算符

c++ - 不调用父类(super class)构造函数的多级继承

opengl - SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做什么用的?

java - 为什么使用 LWJGL 将这些有符号字节读取为无符号字节?