【问题标题】:OpenGL strange bug rendering nothing from VBOOpenGL奇怪的错误从VBO渲染什么
【发布时间】:2014-04-30 08:05:47
【问题描述】:

我有这个代码用于我正在做的一个 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 出现错误渲染并且没有显示(甚至没有显示立方体)?

【问题讨论】:

    标签: debugging opengl vbo


    【解决方案1】:

    您期望在这里发生什么?

    如果您将指针设置为相对于地形,那么它将绘制地形。 glBindBuffer(GL_ARRAY_BUFFER, g_cubeVBO); 在这段代码中什么都不做。

    但是,假设这是您唯一的绘图代码,那么如果您删除 glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);下一次 将使用 g_cubeVBO(因为指针在调用它时使用绑定到 GL_ARRAY_BUFFER 的任何内容)。

    使用立方体中的索引渲染地形也没有多大意义。

    添加这个你绑定你的立方体 VBO 以恢复世界的一些理智:

    glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    

    【讨论】:

    • 非常感谢!我太笨了,我认为你设置指针的顺序并不重要,因为它只会在 GPU 上设置状态,直到调用绘制调用。我现在明白了...然后剩下的问题是找出为什么我的地形没有显示,它确实会影响性能但看不到图形...但至少我现在看到了立方体
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多