我有一个我正在做的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错误渲染并且没有显示(甚至不是立方体)?
答案 0 :(得分:1)
你期望在这里发生什么?
如果相对于地形设置指针,那么它将绘制地形。 glBindBuffer(GL_ARRAY_BUFFER, g_cubeVBO);
在此代码中不执行任何操作。
但是,假设这是您唯一的绘图代码,那么如果您删除glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);
,则绘制它的 next 时间将使用{{1 (因为指针在调用时使用绑定到g_cubeVBO
的任何东西)。
使用多维数据集中的索引渲染地形也没有多大意义。
GL_ARRAY_BUFFER