opengl - 渲染设计(初学者)

时间:2012-12-25 23:07:31

标签: opengl

我有一个模拟程序,我希望在动画中渲染大约500-1000个对象(相当小,最多50个三角形)(比如500次步长)或交互式渲染(更改一个对象意味着在最坏的情况下重新计算所有其他对象)。

这种渲染任务的最佳方法是什么?

我在想VBO并使用glBufferSubData来更新每个时间步的对象。还是有其他方法吗?

另外,由于我应该使用20种不同的VBO,因此我可以使用20种不同的VBO,因此我可以相应地设置属性吗?

2 个答案:

答案 0 :(得分:1)

如果您正在进行关键帧动画(每帧一组顶点),则将它们全部作为单独的VBO上传并更改您绑定的那个,或者将它们全部上传到单个VBO中并更改属性。我怀疑这两种解决方案之间存在很大的性能差异。

我会避免使用glBufferSubData,因为OpenGL应该能够为您管理所有内存。如果这是一个非常大的数据集,我建议使用这种方法,因为您可以从磁盘流式传输所需的顶点,以避免一次性将其全部存储在内存中,但是如果只有一小部分数据,这不是问题。 / p>

如果您正在进行基于骨骼的动画,glBufferSubData方法基本上是唯一的方法,如果您在CPU上进行蒙皮。执行蒙皮(在GPU上)的顶点着色器将比CPU蒙皮表现更好,只需将帧存储在mat3x4制服中。

答案 1 :(得分:0)

对于如此少量的对象,您可能应该选择最简单的方法来进行优化,并且只有在您真正需要时才进行优化...

简单来说,我的意思是对你来说最简单。

如果您愿意,可以使用一个只有不同偏移量的VBO对象,不需要使用多个。