经过几个月的研究,终于搞定了我的导出插件...谈一点在学习过程中的一些心得与大家分享分享...
还是江湖规矩,先上个图吧...
这张是导出插件的简陋的不能再简陋的界面,哈哈...
这张是渲染器的简陋的不能再简陋的界面....
我使用的是D3D的SHADER渲染
其实导出插件的资料说多不多,说少也不少...
个人强烈推荐的看的资料是潘李亮的那篇文章,(做导出插件的话这篇文章必看!!!!不懂就多看几遍!!!)以及他的开源的导出插件的代码(代码口味比较重...)
还有OGRE1.6源代码里有个导出插件的代码,是基于IGAME的,其实也有一定的参考价值...
还有DXSDK2007FEB版本里有个源代码,也是基于IGAME的...
我的EXPORT没有用到IGAME,其实原理都差不多,GOOGLE一下还是有一些东西可以看一下的...
说几个我遇到的问题:
1. 3DMAX中的面分顶点几何数据面还有纹理数据面...face和tface,在遍历整个mesh求顶点索引的时候,可以使用一个MAP表把几何顶点和纹理顶点进行关联...
2. 3DMAX中面得索引和D3D中的顶点索引的顺序是相反的...
3. 其实我花的时间比较多的都是再渲染器上,如果你是用的顶点索引混合的方式来导出的话,一定要记得检查一下设备是否支持,当然用SHADER的话就另当别论了...
4. 3DMAX中的坐标必须要进行转换
//把Matrix3转换为Matrix4
void FunkTreeEnum::Matrix3_To_Matrix4(Matrix3& Mat3,Matrix4& Mat4)
{
Mat4._11 = Mat3.GetRow(0).x;
Mat4._12 = Mat3.GetRow(0).z;
Mat4._13 = Mat3.GetRow(0).y;
Mat4._14 = 0.0f;
Mat4._21 = Mat3.GetRow(2).x;
Mat4._22 = Mat3.GetRow(2).z;
Mat4._23 = Mat3.GetRow(2).y;
Mat4._24 = 0.0f;
Mat4._31 = Mat3.GetRow(1).x;
Mat4._32 = Mat3.GetRow(1).z;
Mat4._33 = Mat3.GetRow(1).y;
Mat4._34 = 0.0f;
Mat4._41 = Mat3.GetRow(3).x;
Mat4._42 = Mat3.GetRow(3).z;
Mat4._43 = Mat3.GetRow(3).y;
Mat4._44 = 1.0f;
}
本来想说的东西还是有很多...只不过这会儿想不起来了...
如果说有朋友在做导出插件的话可以和我交流...
QQ: 147449184