Max导出插件

编写Max导出插件目前有两种选择,一种是使用max脚本,另一种就是使用max SDK了。
使用Max SDK又分为使用Max标准API和IGame接口。

我使用IGame接口编写Max导出插件。
IGame接口就是在Max标准API的基础上有针对性地对游戏导出进行了封装,将通常繁琐的操作调用简化成一个函数,与此同时还可以通过IGame接口获得标准API的数据结构从而使用标准API进行一些复杂的操作。

要想编写Max导出插件首先需要对Max内部对数据的组织形式有一个大致的了解。
Max的数据不论是材质还是骨骼还是网格都是使用树结构保存,每个数据都在相应的节点上,通过便利节点,获得节点类型并作相应的转换便可那到相应的数据,从而进一步导出。
这里需要注意的是,针对游戏常用的导出(材质,动画,网格)是这样的。材质使用一颗独立的树,并且每个材质都有子材质,导出时需要注意。骨骼和网格都存储在场景树下,并通过标示来区分该节点是网格节点还是骨骼节点(或其他节点,游戏一般只关注网格和骨骼),网格节点转换为网格类型,并调用pMesh->SetCreateOptimizedNormalList(); pMesh->InitializeData();函数,这样光滑组才能够生效。骨骼节点那就是拿出该节点的变换矩阵就行了,这既是骨骼动画的矩阵,同时需要注意的是SetStaticFrame(),函数之影响骨骼变换矩阵,也就是说要想到处骨骼动画需要调用该函数来设置动画贞,这样得到的骨骼变换矩阵才是当贞的。

这里说一下.x文件和ogre的.xml各式的区别
.x文件可以指定到每个三角形使用的材质,因此它能够看到网格(或者子网格)使用不同的材质,表现上比较灵活,但是这样带来的后果是dp会比较高,因为网格内由于三角面使用的材质不同,而无法一次渲染,也就是说它的渲染单位是三角面而不是网格。
在有就是.x文件对于手字母不能是数字,各种名称不能出现中文等比较敏感,搞不好会无法显示(ms的mview.exe).

ogre则是必须要子网格内所有三角形只能使用同一个材质,因此对美术制作有一定要求,但它能够保证一个子网格在一个dp就画出,效率较高。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Leo1981816/archive/2010/04/25/5527190.aspx

posted @ 2011-02-11 09:15  oayx  阅读(1754)  评论(0编辑  收藏  举报