绘制动态几何图形的正确或最佳方法是什么

时间:2013-10-03 04:05:03

标签: c++ opengl

处理不断变化的顶点数据对象的最佳方法是什么(例如:动画3D模型)。对于静态几何,最好的方法(我相信)是将顶点数据存储在单个VBO(vertextBuffer对象)中然后将其绑定到VAO(顶点数组对象)。但我不知道如何处理动态geomtry。它为每个模型使用VBO?然后链接到单个VAO?

1 个答案:

答案 0 :(得分:2)

转换矩阵。

你应该知道MVP(模型视图和投影)矩阵,对吧?好好考虑“子模型”,视图矩阵将我定位在一个场景中,模型矩阵使我旋转,任何有意义的偏移(将我的本地原点移动到我的躯干而不是我的左脚......)等等

现在考虑我的上臂,它相对于我的躯干旋转/定位,它由MV(模型视图)矩阵定位,因此使用U代表上臂,v代表顶点,PVMUv代表顶点在我的上臂,我们首先用U移动它们,然后用M移动它们,然后用V移动它然后投射结果(​​V将是一个列向量,我更喜欢数学家的方式)

现在考虑我的下臂L,相对于我的上臂。并将v重新定义为我下臂的顶点。

PVMULv首先将一个顶点转换为L,这可能是一个旋转(关于本地原点或肘部),然后由U转换,可以作为肩部转换,然后通过PVM转换。现在如果改变U,下臂随之移动,如果改变L,只有下臂顶点受到影响。

这是骨骼动画的基础知识。这意味着您只需要存储一组几何图形,并且无论如何都只需来回推动矩阵。如果您正在模型文件中播放动画,那么您将为下臂顶点存储UL,这样您就不必在运行时计算它,如果动画师在编译时(或“设计”时间)处理肢体,这是有意义的