日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3DMax插件和它的3DXI接口

發布時間:2023/12/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3DMax插件和它的3DXI接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3DXI是3DMax提供給游戲開發者的一套數據讀取接口,之前它被稱作為IGame。

最近一直在搞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接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。