老狼寫的3ds max 外掛程式開發新手入門

2021-04-26 09:26:23 字數 4019 閱讀 3373

我盡量把話題說的通俗易懂一點,因為要做外掛程式的可能不只是程式設計師:)

如果你想快速寫外掛程式,通常使用 maxsdk提供的 vc wizard 最容易建立乙個特定的外掛程式框架程式.這裡簡單說一下設定 3dsmax vc wizard 的方法:

安裝了3dsmax product以後,還要安裝maxsdk,sdk和大量的sample在***完整安裝版本上,pluginwizard 的路徑在autodesk/3ds max 2009 sdk/maxsdk/howto/3dsmaxpluginwizard下面,裡面有readme.txt檔案,大意是這樣的:用文字編輯器開啟3dsmaxpluginwizard.vsz,我裝的是3dsmax2009,開啟這個vsz檔案的內容如下:

vswizard 7.0

wizard=vswizard.vswizardengine.8.0

param="wizard_name = 3dsmaxpluginwizard"

param="absolute_path = c:/dev/p4/gouda/3dswin/src/maxsdk/howto/3dsmaxpluginwizard"

param="fallback_lcid = 1033"

把absolute_path 的路徑改為 d:/autodesk/3ds max 2009 sdk/maxsdk/howto/3dsmaxpluginwizard,就是你複製檔案的原路徑

這個時候用vc8 新建 project ,選擇vc++,會看到乙個 3ds max plugin wizard 列表項,然後按照提示一步一步操作就能建立乙個基本的外掛程式框架.

這裡我要多說一點的是用自定義dll project方法建立3dsmax plugins的方法,我本人不太喜歡用現成的東西,凡事總喜歡自己親手做來的東西,這樣理解的也比較深刻透徹

3dsmax外掛程式,有幾個標準的可匯出函式,3dsmax.exe裝載外掛程式時,用getprocaddress api找出預定的幾個標準介面,然後呼叫乙個libclassdesc的介面,建立出使用者自定義的物件例項,類似於"抽象廠"方法

3dsmax 外掛程式中必須定義的標準匯出函式:

#define dllexport_api  __declspec(dllexport)

//外掛程式描述

dllexport_api  const tchar* libdescription()

//這個dll中有幾個外掛程式

dllexport_api  int libnumberclasses()

//取得外掛程式描述塊,3dsmax.exe用它來建立你的外掛程式類的例項

dllexport_api  classdesc* libclassdesc(int i)

} //libversion用來匹配外掛程式和宿主3dsmax.exe之間的版本匹配問題.

dllexport_api  ulong libversion()

關於如何在vc中建立dll project,不需要多說了,要說的一點就是匯出函式必須用 _declspec(dllexport) 修飾,另外還需要在def檔案中列出匯出函式的名字如下:

假定乙個匯出外掛程式的檔名是sampleexporter

//sampleexporter.def

library sampleexporter

exports

libdescription            @1

libnumberclasses  @2

libclassdesc            @3

libversion                   @4

sections

.data read write

下面著重說getmyclassdesc() 這個函式...

#define sampleexporter_class_id   class_id(0xc2a1ee34, 0x832cc295)  //這個class_id用autodesk/3ds max 2009 sdk/maxsdk/help/getcid.exe 自己生成,只要不存在衝突就可以.

//sampleexporter 是從sceneexport 繼承的匯出外掛程式類,sceneexport是sdk預定義的用於實現匯出外掛程式的基類,使用者寫匯出外掛程式,只需要繼承它,然後實現相應的純虛介面即可.

//匯入外掛程式基於sceneexport,輔助外掛程式基於utilityobj,還有建立面板上的,詳見3ds max sdk programmer'sguide中的type of plug-ins 介紹.

//函式doexport是3dsmax.exe和匯出外掛程式互動的主要介面,選擇file/export選單,然後選擇sampleexporter後,將會進入doexport函式...

class sampleexporter : public sceneexport ;

//3dsmax.exe如何與使用者自定義的外掛程式建立起聯絡,就是通過下面這個classdesc類來獲得建立外掛程式物件例項所需要的必要的資訊

class  sampleexporterclassdesc: public classdesc2

virtual void* create(bool /*loading = false*/)         //這裡其實就是"抽象廠"方法,讓使用者提供乙個例項

virtual const tchar *    classname()            

virtual sclass_id superclassid()                

virtual class_id classid()                

virtual const tchar* category()                

virtual const tchar* internalname()                 // returns fixed parsable name (scripter-visible name)

virtual hinstance hinstance()                         // returns owning module handle

};static  sampleexporterclassdesc  expoertdesc;

classdesc2* getmyclassdesc()

//下面是sampleexporter類的實現**

sampleexporter::sampleexporter()

sampleexporter::~sampleexporter()

int sampleexporter::extcount()

const tchar *sampleexporter::ext(int n)

const tchar *sampleexporter::longdesc()

const tchar *sampleexporter::shortdesc()

const tchar *sampleexporter::authorname()

const tchar *sampleexporter::othermessage1()

const tchar *sampleexporter::othermessage2()

unsigned int sampleexporter::version()

void sampleexporter::showabout(hwnd hwnd)

bool sampleexporter::supportsoptions(int ext, dword options)

//這裡是真正的匯出函式入口,使用者選擇匯出後,將執行到這裡

int  sampleexporter::doexport(const tchar *name,expinte***ce *ei,inte***ce *i, bool suppressprompts, dword options)

至此乙個基本的外掛程式框架就搭建起來了,剩下的就是要遍歷場景節點,實現你自己的資料匯出功能了

(完)

3ds max 匯出外掛程式開發後記

一直以來。3ds max 匯出外掛程式的開發這部分對我都是神秘的黑盒子。直到乙個月前,不得不去做這個事,我才開始一步步走近他。通過網路上的只言片語和 揣摩。終於在兩周的時間搞定了匯出外掛程式和骨骼動畫的檢視器。我用的vs2005進行開發。對應 3ds max 2008sdk,3ds max 2009...

3ds max 匯出外掛程式開發後記

一直以來。3ds max 匯出外掛程式的開發這部分對我都是神秘的黑盒子。直到乙個月前,不得不去做這個事,我才開始一步步走近他。通過網路上的只言片語和 揣摩。終於在兩周的時間搞定了匯出外掛程式和骨骼動畫的檢視器。我用的vs2005進行開發。對應 3ds max 2008sdk,3ds max 2009...

3DS MAX外掛程式開發(1) 開發環境配置

開發3dsmax外掛程式必備 vs2005或2008,3ds max 2009 當然不一定是這個版本 3ds max 2009 sdk,3ds max 2009 sdk helper。參照helper getting start installing the plug in wizard一章即可完成...