如何在OpenGL(2.1)中向顶点缓冲对象添加纹理

汤姆

在OpenGL 2.1中纹理映射对象的正确方法是什么?目前,我正在执行以下步骤,但是无法使纹理正确显示在对象上。

  1. 生成缓冲区并存储ID
  2. 绑定缓冲区
  3. 将数据上传到缓冲区
  4. 每次渲染缓冲区中的对象时:

    4.1。启用GL_TEXTURE_2DGL_VERTEX_ARRAY然后GL_TEXTURE_COORD_ARRAY

    4.2。绑定纹理,然后绑定缓冲区

    4.3设置glTexCoordPointer然后设置glVertexPointer

    4.4glDrawArrays用于渲染对象

    4.5通话 glFlush

用于创建VBO的代码:

GLuint flagVBO;
glGenBuffers(1, &flagVBO);
glBindBuffer(GL_ARRAY_BUFFER, flagVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(flag), (void*) flag, GL_STATIC_DRAW);

渲染VBO的代码:

glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glBindTexture(GL_TEXTURE_2D, gameManager->getTextureManager().getTexture("poleEndFlag")); //The get texture method returns 2 which is the correct texture
glColor3f(1.0, 1.0, 1.0);

glBindBuffer(GL_ARRAY_BUFFER, flagVBO);
glTexCoordPointer(2, GL_FLOAT, sizeof(float)*5, (GLvoid*)3);
glVertexPointer(3, GL_FLOAT, sizeof(float)*5, (GLvoid*)0);
glDrawArrays(GL_QUADS, 0, sizeof(flag) / sizeof(float) / 5);
glFlush();

glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);

flagVBO数组:

flag[120] = {
    //Bottom
    -0.1, 1.4, 0.025, 1, 1,
    -0.8, 1.4, 0.025, 0, 1,
    -0.8, 1.4, -0.025, 0, 0,
    -0.1, 1.4, -0.025, 1, 0,
    //Top
    -0.1, 1.95, 0.025, 1, 1,
    -0.8, 1.95, 0.025, 0, 1,
    -0.8, 1.95, -0.025, 0, 0,
    -0.1, 1.95, -0.025, 1, 0,
    //Front
    -0.1, 1.4, 0.025, 1, 0,
    -0.8, 1.4, 0.025, 0, 0,
    -0.8, 1.95, 0.025, 0, 1,
    -0.1, 1.95, 0.025, 1, 1,
    //Back
    -0.1, 1.4, -0.025, 1, 0,
    -0.8, 1.4, -0.025, 0, 0,
    -0.8, 1.95, -0.025, 0, 1,
    -0.1, 1.95, -0.025, 1, 1,
    //Left
    -0.8, 1.95, 0.025, 1, 1,
    -0.8, 1.4, 0.025, 0, 1,
    -0.8, 1.4, -0.025, 0, 0,
    -0.8, 1.95, -0.025, 1, 0,
    //Right
    -0.1, 1.95, 0.025, 1, 1,
    -0.1, 1.4, 0.025, 0, 1,
    -0.1, 1.4, -0.025, 0, 0,
    -0.1, 1.95, -0.025, 1, 0
}

看来顶点坐标正确渲染,但顶点坐标却不正确。该对象将呈现与纹理中主要颜色相同的颜色,但整个纹理不存在。

该图像在左侧显示渲染的对象,在右侧显示其应具有的纹理

该图像在左侧显示渲染的对象,在右侧显示其应具有的纹理

您的纹理坐标指针是错误的。偏移量以字节单位您指定的3个字节位于顶点位置的x和y坐标之间。正确的值是

glTexCoordPointer(2, GL_FLOAT, sizeof(float)*5, (GLvoid*) (3*sizeof(GLfloat)) );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SDL2中显示OpenGL纹理

来自分类Dev

如何在OpenGL中将顶点添加到网格对象?

来自分类Dev

如何在OpenGL ES 2中使用顶点数组对象

来自分类Dev

如何在Konvajs中向Konva.Image()对象添加纹理?

来自分类Dev

如何在 OpenGL 中重新定位绑定到帧缓冲区的 2D 纹理?

来自分类Dev

如何在OpenGL ES 2中处理多个对象

来自分类Dev

如何在OpenGL中在对象上放置纹理?

来自分类Dev

如何在OpenGL中构造glutSolidTorus的纹理?

来自分类Dev

如何在OpenGL中反转纹理颜色

来自分类Dev

如何在OpenGL中处理纹理动画?

来自分类Dev

如何在OpenGL ES 2中正确缩放

来自分类Dev

动态包装OpenGL顶点缓冲对象的数据

来自分类Dev

OpenGL复制顶点缓冲区对象

来自分类Dev

OpenGL绘制顶点缓冲区对象

来自分类Dev

如何在OpenGL ES中的纹理上添加一些像素

来自分类Dev

如何在OpenGL ES中的纹理上添加一些像素

来自分类Dev

如何在OpenGL中的3D对象上应用纹理

来自分类Dev

如何在Android的OpenGL ES中渲染深度纹理

来自分类Dev

如何在OpenGL 3.1中正确渲染为纹理

来自分类Dev

如何在Swift中通过OpenGL显示RGB纹理?

来自分类Dev

如何在现代OpenGL中渲染多个纹理?

来自分类Dev

如何在OpenGL ES 2.0中管理多个纹理?

来自分类Dev

如何在Swift中通过OpenGL显示RGB纹理?

来自分类Dev

如何在 Android 的 OpenGL ES 2.0 中检查上传的纹理?

来自分类Dev

OpenGL 4向顶点缓冲区提供数据

来自分类Dev

如何在 angularfire 2 版本 5 中向添加到节点的对象添加键

来自分类Dev

向QT OpenGL场景图添加纹理

来自分类Dev

OpenGL-向纹理添加新数据

来自分类Dev

如何在SPIR-V Shader中的OpenGL中设置sampler2D制服?

Related 相关文章

热门标签

归档