从3DS MAX中导出骨骼动画注意的几件事

原创 2006年06月08日 11:40:00

编写插件从MAX中导出骨骼动画的几点注意事项.
1.首先要遍历所有的MESH,和BONE,并导出0时刻的MESH所有顶点位置及索引,和BONE的世界变换矩阵的逆矩阵.这些信息可以单独放到一个文件中,以后加入动作时,每个动作可以做为一个文件.
2.如果使用Physique做为蒙皮插件以下是寻找该修改器的代码:
Modifier* FindPhysiqueModifier (INode* nodePtr)
{
 // Get object from node. Abort if no object.
 Object* ObjectPtr = nodePtr->GetObjectRef();


 if (!ObjectPtr) return NULL;

 // Is derived object ?
 while (ObjectPtr->SuperClassID() == GEN_DERIVOB_CLASS_ID && ObjectPtr)
 {
  // Yes -> Cast.
  IDerivedObject *DerivedObjectPtr = (IDerivedObject *)(ObjectPtr);

  // Iterate over all entries of the modifier stack.
  int ModStackIndex = 0;
  while (ModStackIndex < DerivedObjectPtr->NumModifiers())
  {
   // Get current modifier.
   Modifier* ModifierPtr = DerivedObjectPtr->GetModifier(ModStackIndex);

   // Is this Physique ?
   if (ModifierPtr->ClassID() == Class_ID(PHYSIQUE_CLASS_ID_A, PHYSIQUE_CLASS_ID_B))
   {
    // Yes -> Exit.
    return ModifierPtr;
   }

   // Next modifier stack entry.
   ModStackIndex++;
  }
  ObjectPtr = DerivedObjectPtr->GetObjRef();
 }

 // Not found.
 return NULL;
}

3.在导出动画时,MAX中的四元数是反向的.比如我们对骨骼以轴(0,0,1)旋转(90)度.通过Control * rotCont = iBone->GetTMController()->GetRotationController();
iNumKeys = ctlRot->NumKeys();
for( i=0; i < iNumKeys; i++ ) {
TimeValue t = ctlRot->GetKeyTime( i );
Interval valid;
Quat q;
ctlRot->GetValue( t, &q, valid );
}
得到的是 以轴(0,0,-1)旋转(90)度
所以要对四元数的X,Y,Z分量,(也就是轴方向分量与角度一半的正弦积)求负.才能正常的显示动画.

4.GetNodeTM 函数得到的是节点相对世界空间的变换,在导出动画的时候往往要得到相对于它的父节点的变换.所以要做如下变换:
Matrix3 matRelativeTM;
   Matrix3 matParentTM;
   Matrix3 matTM = GetBoneTM(pNode,keyTime);
   

   
   if (boneNode.mParentID == -1)
   {
    matRelativeTM = matTM;
   }
   else
   {

    matParentTM = GetBoneTM(pNode->GetParentNode(),keyTime);
    if( memcmp(&matTM,&matParentTM,12*sizeof(float)) == 0 )
    {
     matRelativeTM.IdentityMatrix();
    }
    else
    {
     matRelativeTM =  matTM * Inverse(matParentTM);
    }
   }

3D max 动作导出与骨骼绑定

          骨骼动画是3D引擎中的一个重要部分。            本质上看,就是让顶点受矩阵m影响,而这个矩阵m是通过几个权重值和匹配的矩阵bm做为系数插值计算的。          这...

3DS MAX 导入骨骼动画插件

篇章一、搭建环境与简单介绍 前段时间做了一个多月的3DS MAX导入插件设计,终于从完全不懂到了现在的懵懵懂懂,期间遇到了一些困难,国内的3DS MAX导入插件的相关资料几乎为零,上网查几乎都是...

3ds Max7 角色动画 骨骼与蒙皮01

  • 2014年03月05日 12:22
  • 21.9MB
  • 下载

3ds Max7 角色动画 骨骼与蒙皮02

  • 2014年03月05日 12:27
  • 23.72MB
  • 下载

Qt3升至Qt4需要注意的几件事项浅谈

Qt3升至Qt4需要注意的几件事项浅谈

Cocos2dx3.x 使用cocostudio导出的骨骼动画

我们在VS中找到"解决方案资源管理器", 在解决方案 上点击右键, 选择添加现有项目.   使用cocostudio导出的骨骼动画" title="Cocos2dx3.0 使用cocostudi...

md3骨骼动画模型

  • 2013年07月16日 11:47
  • 10.97MB
  • 下载

[置顶]OpenGL10-骨骼动画原理篇(3)-Shader版本代码已经上传

接上一个例程OpenGL10-骨骼动画原理篇(2),对骨骼动画的基本原理做了介绍,接下来 要对之前做的工作做一个分析和优化,骨骼动画要做大量的数学计算,当一个模型的顶点 与骨骼的数量都很多的情况下...

Cocos2d-x 3.x 练习 2 骨骼动画

其实是想到什么就是学什么啦。(又跑到骨骼动画什么鬼)。。。 PS:学习历程啦,可能会有很多错误。 骨骼动画用的是spine 的样例了。spineboy 有两个动作 jump 和 walk。 在ex...

初尝2D骨骼动画编辑工具SPINE,并into Unity3D

一、SPINE使用 研究2D骨骼动画,CYou的朋友介绍我SPINE这个工具,开发自Esoteric Software的一款专门制作2D动画的软件,网络上的资料还很少,我这从半吊子美术技术的角度简单...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从3DS MAX中导出骨骼动画注意的几件事
举报原因:
原因补充:

(最多只允许输入30个字)