篇章一、搭建环境与简单介绍
前段时间做了一个多月的3DS MAX导入插件设计,终于从完全不懂到了现在的懵懵懂懂,期间遇到了一些困难,国内的3DS MAX导入插件的相关资料几乎为零,上网查几乎都是为导出插件的资料,这也难怪,大家都只有导出的需求,没有导入的需求。翻墙到国外也只是有一些零零散散的一星半点的片段知识,经过本人的搜集与摸索,终于完成了整个骨骼动画的导入,现将整个3DS MAX导入骨骼动画的整个流程分享给大家,如果能给广大的程序员朋友们带来些许的帮助,将感到无比的欣慰。
我用的环境是3DS MAX 2009 +VS2008,具体的环境配置就不多说了,网上这方面资料很多,这里提供一个地址,如有需要可以查看http://blog.sina.com.cn/s/blog_5c68ccb801017wmm.html;
接下来让我们开始正式工作。
首先使用向导生成了一堆导入插件的文件,导入插件继承于SceneImport类,这个类里面的方法大多可以不管,只需要知道三个方法就好:
const TCHAR *Ext(int n) 用于定义导入插件的文件格式
TCHAR* ShortDesc() 用来给导入的文件格式做一些简短的说明
int DoImport(const TCHAR *filename,ImpInterface *i,Interface *gi, BOOL suppressPrompts)
这个是导入插件的核心方法,所有的导入操作都在这个方法里进行,实际就是进行读取文件的操作。
生成了向导后还要进行一些项目属性的设置,项目才能正常运行:
1、在项目属性-配置属性-C++-命令行-附加选项里给文件路径加上双引号/LD @"C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\ProjectSettings\AdditionalCompilerOptions.txt"
2、在项目属性-配置属性-调试-命令 加上3DS MAX.exe的文件路径 比如我的是:C:\Program Files\Autodesk\3ds Max 2009\3dsmax.exe
另外在介绍下3DS MAX中最常用的类:节点类INode;在下面的讲解中这个类将经常要用到
1、节点概念
在3ds max中,结点与场景中的对象存在着一一对应的关系,每一个过程对象,包括灯光、摄像机、辅助对象等等,出现在视口中的每个对象都关联一个结点。结点存储 着它关联的对象在场景中的相关属性信息,这些属性包括空间变换控制器、用于渲染的材质、可见性控制器、隐藏/非隐藏状态、冻结/解冻状态、线宽显示颜色以 及其他属性。
2、节点方法
结点存储了两个变换矩阵,一个是结点的变换矩阵,另一个是结点关联对象相对于结点的偏移矩阵。另外,结点类是不能被实例化的,要取得结点的实例,必须实例化结点所指向的对象,所以,当实例化结点所指向的对象后,结点就相当于被实例化了。
结点类层次关系的主要方法有:
int NumberOfChildren(); //返回子结点的个数
INode* GetChildNode(int i); //返回第i-th个子结点的指针
INode* GetParentNode(); //返回父结点指针
void AttachChild(INode* node, int keepPos=1)=0; //关联子结点
void Detach(TimeValue t, int keepPos=1)=0; //解除与父结点层次关系
int IsRootNode(); //判断是否为场景根结点
篇章二、开始导入