3

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

这是一种完全不正确的方法吗?有哪些更好/替代方法可以达到相同的结果?

显然,这仅适用于对象相对于自身静止的非常基本的模型(即,无论模型的世界方向如何,模型的任何部分都不会移动)。这就是让我相信确实有更好的方法来做到这一点的原因。

希望我的胡言乱语有道理...

4

1 回答 1

4

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

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

于 2011-04-18T14:35:31.637 回答