全部博文(135)
2010年(135)
分类: LINUX
2010-07-15 16:24:06
之前已经了解了如何用
MEL导出建好的3D模型,并且提到了重用Denis Schluchter发布的MEL
Script。这个Script导出的ogl文件格式可以从前文提供的那个Dump程序的源码中看出,不过下面这幅经过整理的类图会更清楚一些:
从图中不难看出,这个脚本导出的文件还是相当简单的,不过有两个明显的缺点:
根据上图生成的源码:
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即可。
编译方法:将以上所有文件放到同一个目录里,打开一个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