我已经加载了一个波前模型文件(OBJ和. mtl),并将顶点/索引存储在VBO中以供呈现。现在,我只在加载模型时填充一次VBO。我的问题是……重用这个顶点数据来重新绘制模型的多个实例的最佳方法是什么?目前,我只是为模型的每个实例存储一个变换矩阵(旋转,缩放和平移),并使用相关的变换矩阵为每个实例调用draw()
函数。
这样做是完全不正确的吗?有什么更好的方法可以达到同样的结果?
显然,这只适用于物体相对于自身静止的非常基本的模型(即,无论它的世界方向如何,模型的任何部分都不会移动)。这让我相信,确实有更好的方法来做到这一点。
如果您只想更改模型的位置,那么更改转换矩阵是一种合理的方法。在以后的OpenGL版本中,你可以使用实例化绘图在一次调用中用不同的转换多次渲染模型,这样可能会获得一点额外的性能,但是每次只改变转换矩阵的循环是一个很好的起点。
如果你实际上是在动画模型,那就不同了,因为顶点坐标本身必须改变。对于基于关键帧的动画,您可以将每个关键帧加载到单独的缓冲区中,并使用您提供的统一时间值让顶点着色器进行插值。但是这种东西是独立于整个模型的转换的