Chinaunix首页 | 论坛 | 博客
  • 博客访问: 484298
  • 博文数量: 135
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 905
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-24 19:31
文章分类

全部博文(135)

文章存档

2010年(135)

我的朋友

分类: LINUX

2010-07-15 16:24:06

转载  Maya教程 :转换用MEL导出的3D模型 收藏

之前已经了解了如何用 MEL导出建好的3D模型,并且提到了重用Denis Schluchter发布的MEL Script。这个Script导出的ogl文件格式可以从前文提供的那个Dump程序的源码中看出,不过下面这幅经过整理的类图会更清楚一些:
Classes for MEL Exported File Structure 从图中不难看出,这个脚本导出的文件还是相当简单的,不过有两个明显的缺点:

  1. 没有记录material与object之间的关系,对于只有一个object和materila倒也没什么问题,如果object使用了多个材 质或者有多个物体多个材质的情况,就需要修改增强了。
  2. 每个材质只能有最多一个纹理文件。

根据上图生成的源码:
ExpBlockHeader.h ExpFaceBlock.h ExpHeader.h ExpMat.h ExpMaterial.h ExpMaterialBlock.h ExpNormalBlock.h ExpObj.h ExpTexture.h ExpUVBlock.h ExpVertexBlock.h Main.cpp MayaExp.cpp MayaExp.hVector2.h Vector3.h Vector3i.h

有了这些类结构之后,编制一个读取导出的ogl文件是相当直接的,详见MayaExp::loadFromFile(const char * fname)方法。 注意:loadFromFile里有多处malloc调用,这些内存大多没有适当的free掉,反正这个程序是一次性运行的,进程结束时系统会回收的。如 果你准备在别的应用中使用这些代码,就要当心了。

对于单纯的模型数据来说,该MEL导出的ogl文件还是稍嫌复杂,我们可以把它做得更简单些,只要两个int分别记录面和顶点的数量,然后依次写入 顶点坐标(vector3)、法向(vetor3)、UV贴图坐标(vetor2)及三角形面三个顶点的索引(vetor3i),详细的转换步骤也在 MayaExp.cpp里,有两个版本,一个将坐标值存成浮点数格式(MayaExp::saveAsFloat),另一个存成定点数格式 (MayaExp::saveAsFixed)。

最后,写一个main来处理输入参数并调用MayaExp即可。

Vector.h MayaExp.cpp Main.cpp

编译方法:将以上所有文件放到同一个目录里,打开一个Command Window,在命令行下用vc\bin\vcvars32.bat设好环境,然后运行:
cl /ZI MayaExp.cpp Main.cpp user32.lib
即可。或者直接使用我做好的版本:MayaExp.exe

包含所有程序文件的压缩包:maya_exp_all.zip

示例:flyship.mel -> flyship_tri.ogl -> flyship.fixed.000

阅读(1710) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~