【发布时间】:2011-04-02 08:29:13
【问题描述】:
我正在尝试在我目前正在为学校实习编写代码的游戏引擎中实现骨骼动画设置。该引擎使用 c++ 和 directx 10 编码,使用右手系统。
目前我正在使用 collada 导入和加载网格(我知道这不是可用的最佳解决方案)。我正在使用的设置使用四元数进行旋转,在将数据传递到 gpu 以进行 gpu 蒙皮之前,我将其转换为矩阵。我正在使用 softimage 构建测试网格来测试动画代码的各个方面。
我遇到的问题是旋转值。我正在使用 D3DXQuaternionRotationYawPitchRoll 将旋转值从欧拉角转换为四元数。问题是当前动画在错误的轴上。应该是围绕 y 轴的旋转是围绕 x 轴的旋转。为了让它正确动画,我必须交换 x 和 y 值并否定 y 值。这只是一个带有树枝的简单挤压盒。对于每个动画骨骼,我目前正在计算它的局部变换矩阵(旋转矩阵乘以平移矩阵),然后我将父矩阵乘以当前局部矩阵以获得相对于其父矩阵的最终变换矩阵。
正确处理 collada 旋转有什么秘诀吗?我检查的所有内容都显示在将每个骨骼乘以父骨骼之前这些值是正确的。交换矩阵乘法的顺序并没有带来任何明显的改进。非常感谢任何帮助,同时我将在引擎的其他部分工作,因为我目前在循环中花费了太多时间。
【问题讨论】:
标签: animation directx matrix-multiplication collada