如何加载模型一次并在OpenGL中重用它

时间:2011-04-18 14:21:15

标签: opengl model vbo instances

我已经加载了波前模型文件(.OBJ和.MTL)并将顶点/索引存储在VBO中以进行渲染。现在我只在加载模型时填充VBO一次。我的问题是......重用这个顶点数据重绘模型的多个实例的最佳方法是什么?目前,我只是为模型的每个实例存储变换矩阵(旋转,缩放和平移),并使用相关的变换矩阵为每个实例调用draw()函数。

这是一种完全错误的方法吗?有哪些更好/替代方法可以实现相同的结果?

显然,这只适用于物体相对于自身静止的非常基本的模型(即模型的任何部分都不会移动而不管它的世界方向)。这使我相信确实有更好的方法来做到这一点。

希望我的谣言有意义......

1 个答案:

答案 0 :(得分:4)

如果您只想更改模型的位置,更改变换矩阵是一种合理的方法。在以后的OpenGL版本中,您可以使用实例化绘图在一次调用中使用不同的转换多次渲染模型,并且可能获得一些额外的性能,但是每次只更改转换矩阵的循环是一个好的开始点。

如果您实际上是动画模型,那就不同了,因为顶点坐标本身必须改变。对于基于关键帧的动画,您可以将每个关键帧加载到单独的缓冲区中,并让顶点着色器使用您作为制服提供的时间值进行插值。但是这种事情与仅改变整个模型无关。