Поделиться 

Автор: Сергей Ваткин
Для понятия материала требуются знания объектно-ориентированного программирования в среде Visual C++, Windows-программирование динамически подключаемых библиотек (DLL), а также элементарное умение осмысленного нажатия на кнопки в 3D Studio MAX.
Для написания plug-in'ов к 3D Studio MAX 3.x необходимо иметь Visual C++ 6.0, 3D Studio MAX 3.x, для тестирования, и MAX SDK. SDK поставляется на CD вместе с MAX'ом, во время установки 3D Studio MAX, вы выбираете режим установки Custom, где добавляете установку SDK.
Введение
Структура
Несколько советов.
С чего всё началось. Или слово о версиях.
Заключение
3D Studio MAX SDK (Software Development Kit) — объектно-ориентированная библиотека, представляющая собой набор классов, которыми могут пользоваться разработчики, для создания plug-in'ов к 3D Studio Max.
Max на большую часть сам состоит из plug-in'ов. Почти любые части Max'а доступны для разработчиков. Plug-in'ы делятся по типам, в зависимости от их предназначения. При их помощи вы можете создавать новые типы объектов, модификаторов, материалов, утилит, эффектов и т.д. Игроделов в первую очередь интересуют экспортные возможности.
Наверно, к самым простым типам plug-in'ов относятся утилиты. На примере простейшей утилиты мы и устроим наше первое знакомство с SDK.
Plug-in, в рамках языка С++, представляет собой объект специального класса, будем называть такой класс классом plug-in'а. Как файл plug-in представляет собой обычную DLL, которую, если распознает, подгружает Max. При этом такой .dll-файл может содержать несколько объектов plug-in'ных классов. Каждый plug-in'ный файл должен содержать пять функций. При помощи них Max распознаёт plug-in, понимает его тип и т.п.:
Приведём пример файла, содержащего эти пять функций. (Файлы MyUtility.h и MyUtility.cpp будут рассмотрены позже).
// file: DllEntry.cpp // общий .h-файл для нашего plug-in'а #include "MyUtility.h" // Реализована в файле MyUtility.cpp extern ClassDesc2* GetMyUtilityDesc(); // DLL's instance handle. HINSTANCE hInstance; // флаг controlsInit - используется, для того, чтобы элементы // управления инициализировались только один раз int controlsInit = FALSE; BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID) { hInstance = hinstDLL; if (!controlsInit) { // вызывается один раз во время загрузки plug-in'а controlsInit = TRUE; // Инициализация элементов управления MAX'а InitCustomControls(hInstance); // Инициализация стандартных элементов управления InitCommonControls(); } return (TRUE); } __declspec( dllexport ) const TCHAR* LibDescription() { // функция GetString() реализована ниже return GetString(IDS_LIBDESCRIPTION); } __declspec( dllexport ) int LibNumberClasses() { return 1; } __declspec( dllexport ) ClassDesc* LibClassDesc(int i) { switch(i) { case 0: return GetMyUtilityDesc(); default: return 0; } } __declspec( dllexport ) ULONG LibVersion() { // VERSION_3DSMAX - Объявлена в MAX SDK return VERSION_3DSMAX; } // функция достает строку из ресурсов TCHAR *GetString(int id) { static TCHAR buf[256]; if (hInstance) return LoadString(hInstance, id, buf, sizeof(buf)) ? buf : NULL; return NULL; }
13 июля 2001
Категории: 3D Studio MAX, plug-in, плагины, экспорт
Обновление: 5 марта 2006