OpenGL奇怪的错误从VBO渲染

时间:2014-04-29 23:50:41

标签: debugging opengl vbo

我有一个我正在做的OpenGL项目的代码,它什么都没有:

glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3,        GL_FLOAT, GL_FALSE, 0, 0);

// Bind the buffers
glBindBuffer(GL_ARRAY_BUFFER, g_cubeVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_cubeIBO);

// Draw the elements on the GPU
glDrawElements(
        GL_TRIANGLES,
        3*12,
        GL_UNSIGNED_INT,
        0); // SIZE IN BYTES, REMEMBER!

// Disable the vertex attributes (not necessary but recommended)
glDisableVertexAttribArray(0);

但当我删除该行

glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);

立方体模型完美呈现。现在g_terrainVBO确实存在,因为我使用

在缓冲区中检查了它的大小
// verify buffer size
int nBufferSize = 0;
glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &nBufferSize);
int originalVertexArraySize = ( nBufferSize / sizeof(TerrainModel::Vertex) );
cout << "Buffer size: " << originalVertexArraySize << endl;

并且尺寸正确显示。

有人知道这里有什么问题吗?是什么导致我的地形模型VBO错误渲染并且没有显示(甚至不是立方体)?

1 个答案:

答案 0 :(得分:1)

你期望在这里发生什么?

如果相对于地形设置指针,那么它将绘制地形。 glBindBuffer(GL_ARRAY_BUFFER, g_cubeVBO);在此代码中不执行任何操作。

但是,假设这是您唯一的绘图代码,那么如果您删除glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);,则绘制它的 next 时间将使用{{1 (因为指针在调用时使用绑定到g_cubeVBO的任何东西)。

使用多维数据集中的索引渲染地形也没有多大意义。

在 之后添加此,绑定您的多维数据集VBO以恢复对世界的一些理智:

GL_ARRAY_BUFFER