3DMax插件和它的3DXI接口
最近一直在搞Ogre的插件
相關的文檔都很少
我相信搞這個的人很多,但是有時間整理拿出來共享的資料實在是太少
Ogre自帶的maxExplorer只是xml格式,二進制數據的導出竟然未完成,汗一個
Lexi的搞得很復雜,還綁上了Ogre本身,通過Ogre的mesh接口導出,閱讀和使用上很麻煩
我的方法很土
用oFusion導出,然后通過Ogre的序列化接口跟蹤
參考mesh的format文件頭描述信息,編寫自己的格式導出
遇到的問題很多
像是3DXI本身的接口說明就不太清晰
例如一個TexCoord就有幾種方式可以讀取,卻沒有注明,當GetActiveMapChannelNum().Count() == 1時應該用GetTexVertex,否則應該用GetMapFaceIndex或GetMapVertex
帶來了不小的困擾
另外,3DXI只負責收集數據,當遇到MultiMaterial時,手動拆分和復制vertices的工作還是要自行解決
google到的資料上,前輩們都說自從有了3DXI,挺對得起這張臉,俺沒有之前舊接口的切身體驗,么有感覺
總的來說,Ogre本身對于plugin的資料不是太多,加上3DXI SDK的說明中還存在有少量的BUG,所以走了不少彎路
大家有空可以看看現在max9 sdk里 Programmer's Guide里 Programming with 3dxi里的IGameMesh有一段代碼
//gm is a pointer to IGameMesh
if(exportMappingChannel)
{
??? Tab<int> mapNums = gm->GetActiveMapChannelNum();
??? int mapCount = mapNums.Count();
?
??? for(int i=0;i < mapCount;i++)
??????? int vCount = gm->GetNumberOfMapVerts(mapNums[i]);
??? buf.printf("%d",vCount);
??? for(int j=0;j<vCount;j++)
??? {
??????? vert = NULL;
??????? Point3 v;
??????? if(gm->GetMapVertex(mapNums[i],j,v))
??????? {
??????????? //use data here
??????? }
??? }
??? int fCount = gm->GetNumberOfFaces();
?
??? for(int k=0;k<fCount;k++)
??? {
??????? DWORD v[3];
??????? gm->GetMapFaceIndex(mapNums[i],k,v);
??????? //use data here
??? }
}
這一段是從之前老的SDK中同樣地方的一段代碼
| ? ?//gm?is?a?pointer?to?IGameMesh ?if(exportMappingChannel) ?{ ??Tab<int>?mapNums?=?gm->GetActiveMapChannelNum(); ??int?mapCount?=?mapNums.Count(); ?? ??for(int?i=0;i?<?mapCount;i++) ??{ ?????? ???int?vCount?=?gm->GetNumberOfMapVerts(mapNums[i]); ???buf.printf("%d",vCount); ???for(int?j=0;j<vCount;j++) ???{ ????vert?=?NULL; ????Point3?v; ????if(gm->GetMapVertex(mapNums[i],j,v)) ????{ ?????//use?data?here ????} ?? ???} ???int?fCount?=?gm->GetNumberOfFaces(); ?? ???for(int?k=0;k<fCount;k++) ???{ ????DWORD??v[3]; ????gm->GetMapFaceIndex(mapNums[i],k,v); ????//use?data?here ???}
??}
?} |
大家來找岔~
目前我的插件中,關于mesh這邊的導出工作基本上已經完成
1. position, diffuse, normal, texcoordx的導出
2. multi material的處理
3. 最小化vertex復制/拆分
4. material及sub-material數據導出
5. texture自動復制
接下來準備做mesh關鍵幀動畫和骨骼動畫這一塊
待完成后我會抽時間寫篇文章出來共大家共享
或者先提交給《游戲創造》騙點稿費過來花花也未嘗不是一個好主意^_^Y
轉載于:https://www.cnblogs.com/oiramario/archive/2007/11/27/973722.html
總結
以上是生活随笔為你收集整理的3DMax插件和它的3DXI接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio Team S
- 下一篇: XP Sp2下双机通过无线网卡实现Int