2010-08-22 103 views
1

我正在尝试在游戏引擎中实现骨骼动画设置我目前正在为我的学校实习编写代码。该引擎使用右手系统以C++和directx 10编码。Collada和骨骼动画

目前我正在使用collada导入和加载网格(我知道这不是最好的解决方案)。我正在使用的设置使用四元数进行旋转,在转换为矩阵之前,将数据传递给gpu进行gpu蒙皮。我正在使用softimage来构建测试网格来测试动画代码的各个方面。

我遇到的问题是当涉及到旋转值。我正在使用D3DXQuaternionRotationYawPitchRoll将旋转值从欧拉角度转换为四元数。与此问题是,目前动画是在错误的轴上。围绕y轴的旋转应该是围绕x轴的旋转。为了正确动画,我必须交换x和y值并取消y值。这只是一个简单的带分支的挤压箱。对于每个动画骨骼,我目前正在计算它的局部变换矩阵(旋转矩阵乘以平移矩阵),然后将父矩阵乘以当前局部矩阵,以获得相对于其父变换的最终变换矩阵。

是否有一些秘密来妥善处理collada旋转?我检查过的所有内容显示,在将每个骨骼与父项相乘之前,这些值是正确的。交换矩阵乘法的顺序并没有明显的改善。任何帮助都非常感谢,同时我将在引擎的其他部分工作,因为我花了太多时间在圈子中运行。

回答

0

欧拉角不足以描述你想要做的事情。你应该使用四元数作为你的动画关键帧的来源;四元数中的信息比三角形的欧拉角更多。