gpt4 book ai didi

java - LWJGL 中带有纹理的 VBO

转载 作者:行者123 更新时间:2023-12-02 07:49:01 25 4
gpt4 key购买 nike

如何将纹理附加到 VBO?

我让它与 colorBuffer 一起工作,现在我想实现一个纹理。这是我的绘制方法:

Color.white.bind();
glBindTexture(GL_TEXTURE_2D, texture.getTextureID());

glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, textureData, GL_STATIC_DRAW);
glVertexPointer(vertexSize, GL_FLOAT, 0, 0L);




glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(3, GL_FLOAT, 0, 0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glDrawArrays(GL_QUADS, 0, amountOfVertices);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

根本不显示任何内容。纹理已正确加载,并且我让它在立即模式下工作。我需要做什么才能使其与 VBO 一起工作?

最佳答案

看起来在设置 texCoordPointer 时,纹理坐标的 VBO 没有绑定(bind)。更改命令的顺序应该可行。此外,您还可以使用单个 VBO 中的 texCoord 数据覆盖顶点。最简单的解决方案是每个都有两个单独的 VBO。

glBindTexture(GL_TEXTURE_2D, texture.getTextureID());
// vertices
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
glVertexPointer(vertexSize, GL_FLOAT, 0, 0L);
// texCoords
glBindBuffer(GL_ARRAY_BUFFER, vboTexCoordHandle);
glBufferData(GL_ARRAY_BUFFER, textureData, GL_STATIC_DRAW);
glTexCoordPointer(3, GL_FLOAT, 0, 0);
// unbind VBO
glBindBuffer(GL_ARRAY_BUFFER, 0);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glDrawArrays(GL_QUADS, 0, amountOfVertices);

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

注意:通常您不希望通过对每个 VBO 多次调用 glBufferData 来创建新的 VBO。

关于java - LWJGL 中带有纹理的 VBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com