【发布时间】:2014-04-20 21:19:30
【问题描述】:
我有几个关于 OpenGL 如何处理这些绘图操作的问题。
假设我将 OpenGL 指针传递给我的顶点数组。然后我可以用一组索引调用 glDrawElements。它将使用顶点数组中的那些索引绘制请求的形状正确吗?
在调用 glDrawElements 之后,我可以使用另一组索引进行另一个 glDawElements 调用吗?然后它会使用原始顶点数组绘制新的索引数组吗?
当我重做所有这些调用时,OpenGL 是否会为下一帧保留我的顶点数据?那么下一个顶点指针调用会快很多吗?
假设最后三个问题的答案是肯定的,如果我想在每帧的多个顶点数组上执行此操作怎么办?我假设在超过 1 个顶点数组上执行此操作会导致 OpenGL 从图形内存中删除最后使用的数组并开始使用新的数组。但就我而言,顶点数组永远不会改变。所以我想知道的是opengl是否会保留我的顶点数组,以防下次我发送顶点数据时它会是相同的数据?如果没有,有没有办法可以优化它以允许这样的事情?基本上,我想在不更新顶点数据的情况下使用索引在顶点之间进行程序绘制,以减少开销并加速复杂的渲染,这需要不断变化的形状,这些形状将始终使用原始顶点数组中的顶点。这是可能的还是我只是幻想?
如果我只是幻想我的第四个问题,有什么好的快速方法可以在每帧中绘制大量多边形而只有少数会改变?即使是很小的变化,我是否总是需要传入一组全新的顶点数据?当顶点数据没有改变时,它是否已经这样做了,因为我注意到我无法真正绕过顶点指针调用每一帧。
请随意抨击我在断言中犯的任何逻辑错误。我正在尽我所能了解 opengl 的工作原理,我目前对其工作原理的假设完全有可能是错误的。
【问题讨论】:
标签: c++ opengl vertex-array