OpenGL中DirectX文件的骨架动画

Paw*_*arz 2 c++ opengl directx animation

我正在尝试将*.x文件导入我的引擎并使用OpenGL动画它们(目前没有着色器,但现在这并不是真正相关).我在MSDN上找到了格式参考,但它在问题上没有多大帮助.

所以 - 基本上 - 我已经创建了一个文件,其中包含一个类似恶魔的简单动画,有7个骨骼(主要,尾部2个,腿部4个),其中只有2个(右腿)现在是动画.我已经在DXViewer中测试了网格,它似乎在那里工作得很好,所以问题必须是我的代码的一面.

当我导出网格物体时,我得到一个包含大量信息的文件,其中有三个重要的位置用于骨架动画(以下所有矩阵都用于RLeg2骨骼):

  1. SkinWeights - matrixOffset

    -0.361238,  -0.932141, -0.024957,  0.000000,
     0.081428,  -0.004872, -0.996669,  0.000000,
     0.928913,  -0.362066,  0.077663,  0.000000,
     0.139213,  -0.057892, -0.009323,  1.000000
    
    Run Code Online (Sandbox Code Playgroud)
  2. FrameTransformMatrix

    0.913144,  0.000000, -0.407637,  0.000000,
    0.069999,  0.985146,  0.156804,  0.000000,
    0.401582, -0.171719,  0.899580,  0.000000,
    0.000000, -0.000000,  0.398344,  1.000000
    
    Run Code Online (Sandbox Code Playgroud)
  3. 绑定姿势中的AnimationKey矩阵

    0.913144,  0.000000, -0.407637,  0.000000, 
    0.069999,  0.985146,  0.156804,  0.000000,
    0.401582, -0.171719,  0.899580,  0.000000,
    0.000000, -0.000000,  0.398344,  1.000000
    
    Run Code Online (Sandbox Code Playgroud)

我的问题是 - 我对这些矩阵做了什么?我在纽卡斯尔大学网站上找到了一个等式(http://research.ncl.ac.uk/game/mastersdegree/graphicsforgames/skeletalanimation/),但那里只有一个矩阵.问题是 - 如何组合这些矩阵来获得顶点变换矩阵

Iva*_*rop 6

这篇文章并不是一个完整的答案,而是一组有用的链接.

如何获取动画所需的所有信息

问题是如何导入网格,为什么要这样做.你可以用.x网格战斗一个月,但这没有任何意义,因为这.x是一个非常基本的,旧的,非常不够好的格式.您.x在StackOverflow上找不到很多格式的粉丝.=)

.x文件以棘手的方式存储动画数据.它旨在通过一组D3DX*()功能加载.但是,要手动获取骨骼和权重,您必须预处理加载的数据.很多东西要编码.这是一篇很重要的文章,解释了如何:

加载和显示没有DirectX的.X文件

做事的好方法就是切换到一些网格加载库.最流行和最普遍的是Assimp.至少,看看他们的文档和/或源代码,他们如何处理加载和预处理,以及什么乳清作为输出.另外,这里有一个很好的解释:

教程38 - 使用Assimp的骨骼动画

所以,有了assimp你可以停止战斗并立即开始制作动画.也许以后,当你知道它是如何工作的时候,你可以编写自己的装载机.

当你获得动画所需的所有信息时

骨骼动画是一个基本主题,在网络上详细解释.

希望能帮助到你!