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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值