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

最佳答案

转换矩阵。

您应该了解MVP(模型 View 和投影)矩阵,对吗?好考虑“子模型”的模型, View 矩阵将我放置在场景中,模型矩阵使我旋转,任何有意义的偏移(将我的本地原点移动到我的躯干而不是我的左脚上……)等等。

现在考虑我的上臂,它相对于我的躯干旋转/定位,该躯干由MV(模型 View )矩阵定位,因此使用U表示上臂,而v表示顶点,PVMUv表示我的上肢顶点 ARM ,我们首先将它们移动U,然后移动M,然后移动V然后投影结果(V将是列 vector ,我更喜欢数学家的方式)

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

PVMULv首先将L转换为顶点(可以是旋转(绕本地原点或肘部)),然后将其转换为U(可以将其作为肩部),然后再按常规使用PVM。现在,如果更改U,则下臂随之移动;如果更改L,则仅影响下臂顶点。

这是骨骼动画的基础。这意味着您只需要存储一组几何图形,就可以像往常一样来回推送矩阵。如果要在模型文件中播放动画,则将UL存储在下臂顶点中,这样就不必在运行时进行计算,只要动画师在编译时(或“设计”时)处理肢体,就可以了。

关于c++ - 绘制动态几何图形的正确或最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19150547/

10-13 09:53