【问题标题】:Deleting data out of a OpenGL VBO从 OpenGL VBO 中删除数据
【发布时间】:2013-01-31 23:41:09
【问题描述】:

我有一个包含 4096 个立方体的 VBO,我想知道是否可以编辑 VBO 以实际移除一个立方体。这是我渲染我的 vbo 的代码(我知道我正在以旧方式渲染它):

for (int y = 0; y < 16; y++) {
        for (int x = 0; x < 16; x++) {
            for (int z = 0; z < 16; z++) {
                glPushMatrix();
                glTranslatef(x, y, z);
                glDrawArrays(GL_QUADS, 0, 24);
                glPopMatrix();
            }
        }

    }
    glDisableClientState(GL_VERTEX_ARRAY);

非常简单。现在我真的可以使用一种方法从 vbo 中删除数据吗?我是否必须创建一个单独的数组列表并将所有多维数据集添加到其中并从那里删除它们?我正在使用 LWJGL,但我怀疑这很重要。

【问题讨论】:

  • 您没有绘制 4096 个立方体。您的缓冲区对象不包含 4096 立方体(或者如果包含,则您没有使用其中的大部分)。您正在使用不同的位置绘制 同一个立方体 4096 次。我看到这一点是因为您使用 相同的参数 调用 glDrawArrays。因此,您使用相同的顶点数据进行绘制。
  • 好吧,这是有道理的。那我怎么画多个立方体呢?

标签: opengl lwjgl vbo


【解决方案1】:

我想知道是否可以编辑 VBO 以实际移除立方体。

  1. glMapBuffer() 获取可写指针。

  2. 将要删除的顶点交换到 VBO 的末尾。

  3. glUnmapBuffer() 重新上传 VBO。

  4. 确保将count 参数适当地减少为glDrawElements()(或任何你使用的)。

您还可以通过glBufferSubData() 发挥创意。

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多