天天看點

3DMAX導出插件開發過程中需要注意的一些地方

經過幾個月的研究,終于搞定了我的導出插件...談一點在學習過程中的一些心得與大家分享分享...

還是江湖規矩,先上個圖吧...

3DMAX導出插件開發過程中需要注意的一些地方

這張是導出插件的簡陋的不能再簡陋的界面,哈哈...

3DMAX導出插件開發過程中需要注意的一些地方

這張是渲染器的簡陋的不能再簡陋的界面....

我使用的是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

繼續閱讀