MAX匯入匯出外掛程式略

2021-05-10 01:32:11 字數 2020 閱讀 6772

下午的時候假裝很無聊,於是就無聊到去寫當時說的匯入外掛程式。 用嚮導生成匯入外掛程式的**雛形,鑑於嚮導生成**的冗餘,便對**進行精簡。首先嚮導生成的**都不能直接執行,通常的錯誤表現為(1)巨集定義重複使用了相同的數值;(2)類描述中的create方法應修改為;(3)類描述中的createmanipulator()方法沒有實現,修改簡單實現為。另外四個類被我乾掉兩個類,對剩餘的兩個類也進行了修整,以至基本可以完成匯入功能。

就匯入外掛程式而言,實現比較簡單,並沒有多少可說的地方。適我在寫的過程中看到的一部分類、方法及**,稍作分析說明。匯入外掛程式類繼承於sceneimport類,這個模擬較簡單,方法也不多,這主要是因為匯入外掛程式功能比較單一。下面介紹一下這個sceneimport類。

sceneimport類是建立檔案匯入外掛程式的基類,這個類的方法用來描述外掛程式的屬性和控制匯入的過程。主要的方法有:

(1) sceneimport(),~sceneimport() 建構函式和析構函式,沒必要多說。

(2) int extcount() 用以返回匯入外掛程式支援的檔案型別(副檔名)個數。

tchar* ext(int i) 用以返回支援的第i種檔案型別的副檔名。

tchar* longdesc() 長字串,用以描述匯入外掛程式所支援的型別檔案

tchar* shortdesc() 短字串,用以描述匯入外掛程式所支援的型別檔案

(3)tchar* authorname() 匯入外掛程式的著作者名

tchar* othermessage1() 第一條顯示的訊息字串

tchar* othermessage2() 第二條顯示的訊息字串

int version() 匯入外掛程式的版本號,格式為版本號乘以100(如v3.01 = 301)

void showabout(hwnd hwnd) 呼叫該方法時顯示乙個關於對話方塊

(4)int doimport() 核心方法,實際處理檔案匯入操作

int zoomextents() 是否支援縮放擴充套件

以上即為sceneimport類的所有方法,重要的方法主要就是設定支援檔案型別及數目,以及實際處理讀取檔案的doimport()函式。

進行檔案讀取的操作在doimport()函式中進行,實際上就是對檔案資料的讀取,然後為這些資料建立場景object和node等。這之間我恰好遇到 這樣乙個問題,即我在建立物體時用的是triobject* tob = new triobject;這在匯入後顯示都沒有問題,但是當我重置或者關閉時都會報錯,而且該物體在修改器裡面顯示是mesh而不是editable mesh。後來經過不斷的測試發現,問題原來是出現在物體的建立方式上,我將該建立方式改為triobject* tob = createnewtriobject(),這樣就可以了。但是我並不明白這兩種建立方式有什麼不同,當然我知道肯定是有區別的,我甚至都這兩種 triobject進行了對比,但是可能沒有留意到區別。事實上用第二種方式肯定比第一種方式保險,因為它肯定比第一種直接建立類例項做了更多的工作。另 外就是確定匯入模型的區域性座標系,為便於匯入後的模型在max中容易操作,建議取模型中所有頂點座標的平均值作為物體座標系的原點。

對於匯出外掛程式其實類似,匯出外掛程式繼承於sceneexport類,該類的大部分方法和sceneimport類類似,只是匯出功能的具體實現是在 doexport()方法中。還有乙個不同即是sceneexport類沒有zoomextents()方法,取而代之是 supportoptions()方法,該方法被3ds max呼叫,以決定對於某個指定的副檔名型別,是否支援乙個或多幾個匯出選項,目前只有一種可用的選項scene_export_selected, 而且該選項的意義未來也有可能發生改變。因此,這個方法其實很少被用到。

場景中所有的物體都對應乙個結點,場景中所有的結點構成乙個樹結構。首先inte***ce::getrootnode()方法可以找到場景的根結點,根 結點並不懸掛任何物體;場景中其他物體或結點都屬於這顆樹的非根結點,遍歷該樹,就可以得到所有的結點資訊,對結點對應物體資訊的檢測,可以得到我們需要 的物體模型資訊,從而進行匯出操作。因此我認為匯出外掛程式的難點在於如何獲取場景中的所有資訊而不是具體的匯出操作。我做了乙個僅僅匯出幾何物體結構的簡單 外掛程式作為測試,其他需要匯出更複雜資訊的操作類似。

Max匯出外掛程式

編寫max匯出外掛程式目前有兩種選擇,一種是使用max指令碼,另一種就是使用max sdk了。使用max sdk又分為使用max標準api和igame介面。我使用igame介面編寫max匯出外掛程式。igame介面就是在max標準api的基礎上有針對性地對遊戲匯出進行了封裝,將通常繁瑣的操作呼叫簡化...

M2及WMO匯入外掛程式 Max8

m2模型匯入目前還不支援骨架動畫的正確匯入,匯入骨骼的旋轉關鍵楨資料後會使模型變形,另外骨骼動畫也未與蒙皮聯絡上。wmo檔案只載入了該場景的幾何資料和 portal 面,portal 載入到max 中表示為乙個平面。燈光,其他模型物件擺放資料和霧等未匯入。由於blizzard 使用的貼 件格式為 b...

mysql 匯入匯出 mysql匯入匯出sql檔案

window下 1.匯出整個資料庫 mysqldump u 使用者名稱 p 資料庫名 匯出的檔名 mysqldump u dbuser p dbname dbname.sql 2.匯出乙個表 mysqldump u 使用者名稱 p 資料庫名 表名 匯出的檔名 mysqldump u dbuser p...