我需要知道如何渲染许多不同的 3D 模型,这些模型将它们的几何形状更改为每一帧(动画模型),不要重复模型和纹理。
我携带所有模型,并为每个模型创建了一个“对象”模型类。
渲染它们的最佳方式是什么?
- 为每个 3D 模型使用 1 个 VBO
- 为所有模型使用单个 VBO(完全不同,我认为这个选项是不可能的)
我在 Windows 上使用 OpenGL 3.x 或更高版本、C++。
这是为什么?这取决于获取数据、转换数据、将数据推送到 GPU 以及使屏幕上的像素闪烁的复杂过程。因此,出现了一些通常可能会提高性能的指南,而不是“一种最佳方式”。
:)
)现在,很明显,如果你想拥有一个会改变的模型,你不能有蛋糕然后吃掉它。你必须做出权衡。简而言之,动态对象永远不会像静态对象那样快速渲染。那你该怎么办?
GL_STREAM_DRAW
或GL_DYNAMIC_DRAW
)——这应该保证最佳的内存安排。最后但并非最不重要的一点是,始终仔细衡量您的更改对绩效的影响。盲目地去是没有用的。准确而彻底地测量(甚至像着色器编译时间这样的东西有时也很重要!)。然后,即使您通过反复试验,也有希望到达某个地方。
并特别解决您的一个观点;是否是一个大的 VBO 和几个小的 VBO 并不重要,但一个巨大的 VBO 可能无法适应内存。你仍然可以更新它的一部分,最重要的是它内部的内存安排。