Sergei ShaykinСтатьи

Основы плагиностроения к 3D Studio MAX.

Автор:

Для понятия материала требуются знания объектно-ориентированного программирования в среде 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;
}
Страницы: 1 2 3 Следующая »

#3D Studio MAX, #plug-in, #плагины, #экспорт

13 июля 2001 (Обновление: 14 мая 2013)

Комментарии [14]