2009年12月27日 星期日

3dsMax Exporter Plug-in (2)

在實際執行之前,要先改一些程式碼。

打開專案程式的主檔案MyExporter1.cpp。

clip_image002

這個就是我們的Exporter主物件。從SceneExport繼承而來。

DoExport函式是實際進行輸出工作的入口函式。其他還有一些設定的函式,不過只有設定輸出檔副檔名的Ext函式比較重要。

int MyExporter1::ExtCount()
{
    #pragma message(TODO("Returns the number of file name extensions supported by the plug-in."))
    return 1;
}

const TCHAR *MyExporter1::Ext(int n)
{       
    #pragma message(TODO("Return the 'i-th' file name extension (i.e. \"3DS\")."))
    return _T("me1");
}

const TCHAR *MyExporter1::LongDesc()
{
    #pragma message(TODO("Return long ASCII description (i.e. \"Targa 2.0 Image File\")"))
    return _T("My Exporter Sample 1");
}
const TCHAR *MyExporter1::ShortDesc()
{           
    #pragma message(TODO("Return short ASCII description (i.e. \"Targa\")"))
    return _T("My Exporter 1");
}

我們把 ExtCount, Ext, LongDesc, ShortDesc 函式簡單實做之後,重新編譯一次。

然後,從 Visual Studio Debug 執行它。

跑不起來是正常的。

打開專案的 Property 設定,在 Debugging –> Command 那一項,把 3ds max 的執行檔設定進去。

clip_image002[9]

然後我們可以 Start Debugging。

Visual Studio 會啟動 3ds max,而 max 會將我們的 plug-in load 進去。

我們的 exporter 是在 export 檔案時才會用到的,所以,先 export 看看。

我們會在存檔類型那裏,找到我們的輸出檔格式。

clip_image001

到這裏,我們的 exporter 算是可以掛上 max 系統裡了。

2009年12月24日 星期四

3dsMax Exporter Plug-in (1)

序言

Exporter 是我們在製作 3D 遊戲時,非常常用的一項工具程式。由於美術所製作的 3dsMax 模型,對於 3D 引擎來說,資料過多且複雜,所以我們需要借助 Exporter 將模型資料轉出成我們所需要的資料格式。DirectX X-File 即為其中一種格式。

3dsMax 利用了抽象介面的概念,定義了非常多的 Interface,Plug-in 設計者可以繼承這些 Interface 來實做,3dsMax 便可以透過抽象介面虛擬函式的動態連結,在需要的時候呼叫 Plug-in 所提供的實作物件。

Step by Step

第一步,當然是先把 3dsMax 安裝起來,同時,要安裝 3dsMax SDK,是的,Max 也有 SDK。

接著,為了自己的便利,最好把 "3ds max Plugin Wizard" 安裝起來。通常 SDK 的目錄文件裡都有,如果沒有,就花點時間請 Google 大神幫忙。

安裝完畢,Visual Studio的專案裡,會多了一種專案。

image

建立一個新專案 ( MyExporter1 ),當然,要選取3ds max Plugin Wizard。

然後Wizard會出現以下的選擇畫面。

clip_image001

看到麼? 沒在騙人,真的有很多種類型的 Plug-in。

我們這次需要的是 File Exporter 。

選擇以後,後面兩個步驟就照著需要,填寫裡面內容。

然後,Wizard 就會協助建立一個 Plug-in 專案。

有了專案,編譯看看。

如果,我們前面的設定沒有問題,編譯通常就沒問題。我們會得到一個附檔名是 dle 的檔案,直接輸出在 3dsMax 的 plugin 目錄下。

dle 檔案實際上就是一個 dll ,改成 dle 只是表示這是一個 exporter 。