我有一个模拟程序,我希望在动画中渲染大约500-1000个对象(相当小,最多50个三角形)(比如500次步长)或交互式渲染(更改一个对象意味着在最坏的情况下重新计算所有其他对象)。
这种渲染任务的最佳方法是什么?
我在想VBO并使用glBufferSubData
来更新每个时间步的对象。还是有其他方法吗?
另外,由于我应该使用20种不同的VBO,因此我可以使用20种不同的VBO,因此我可以相应地设置属性吗?
答案 0 :(得分:1)
如果您正在进行关键帧动画(每帧一组顶点),则将它们全部作为单独的VBO上传并更改您绑定的那个,或者将它们全部上传到单个VBO中并更改属性。我怀疑这两种解决方案之间存在很大的性能差异。
我会避免使用glBufferSubData
,因为OpenGL应该能够为您管理所有内存。如果这是一个非常大的数据集,我建议使用这种方法,因为您可以从磁盘流式传输所需的顶点,以避免一次性将其全部存储在内存中,但是如果只有一小部分数据,这不是问题。 / p>
如果您正在进行基于骨骼的动画,glBufferSubData
方法基本上是唯一的方法,如果您在CPU上进行蒙皮。执行蒙皮(在GPU上)的顶点着色器将比CPU蒙皮表现更好,只需将帧存储在mat3x4
制服中。
答案 1 :(得分:0)
对于如此少量的对象,您可能应该选择最简单的方法来进行优化,并且只有在您真正需要时才进行优化...
简单来说,我的意思是对你来说最简单。
如果您愿意,可以使用一个只有不同偏移量的VBO对象,不需要使用多个。