Какую книгу купить ?
- Автор темы Шансон
- Дата создания
И если думаете что плагин создать легко то вот читайте :Создание плагина 3ds Max [Выбор Публики]
Автор: catBurdger
Введение
В уроке рассматривается технологическая цепочка создания плагина 3ds Max в среде Microsoft Visual Studio с употреблением 3ds Max SDK и языка программирования C++. Также реализуется MAXScript-версия плагина. Предоставляемый материал – это лишь начальная точка на пути освоения техники разработки 3ds Max SDK-плагинов.
Урок подготовлен по заявкам пользователей Render.ru.
Плагин – это программный модуль, подключаемый к основной программе и либо реализующий часть функционала основной программы, либо расширяющий ее возможности.
Так, в 3ds Max к первой группе плагинов относятся стандартные плагины, хранящиеся в папке stdplugs и загружаемые при запуске приложения. Их список отображается в приведенном на рис. 1 диалоге Plug-in Manager (меню Customize – Plug-in Manager).
Рис. 1. Plug-in Manager
Эти плагины, их около 350, реализуют значительную часть функционала 3ds Max. Например, плагин prim.dlo обеспечивает создание стандартных примитивов, сплайнов и стандартных источников света.
Прочие, нестандартные плагины предпочтительнее размещать в других папках и загружать по мере необходимости.
3ds Max SDK (Solution Development Kit, инструментарий разработчика) имеется в профессиональной версии 3ds Max и содержит заголовочные и библиотечные файлы, обеспечивающие доступ к классам и другим данным 3ds Max. Кроме того, в поставке имеется помощник и большое число примеров.
Плагин 3ds Max может быть написан на языке MAXScript и на языке C++ с употреблением 3ds Max SDK.
В первом случае плагин создается в среде 3ds Max, а во втором – в среде Microsoft Visual Studio.
Во многих случаях MAXScript может обеспечить такой же функционал, как и SDK. Однако скорость SDK-плагинов выше.
SDK-плагин – это откомпилированный и собранный dll-файл C++ (DLL, Dynamic Linked Library, динамически подключаемая библиотека). Рекомендованное расширение файла зависит от назначения плагина. В стандартной поставке 3ds Max плагины, оперирующие материалами и их картами, имеют расширение DLT, а плагинам, создающим объекты, дается расширение DLO, плагины-модификаторы выделяются расширением DLM и так далее.
Поставка 3ds Max SDK включает помощник создания плагинов Plug-in Wizard. Он поддерживает (или планирует поддерживать) создание около 40 следующих видов плагинов (в скобках указывается стандартное расширение):
Anti-Aliasing Filters – фильтры, сглаживающие изображение (DLK);
Atmospheric – атмосферные эффекты (DLV);
Cameras – камеры (DLO);
Color Selector – выбор цвета (DLU);
Construction Grid Objects – создание сеточных объектов (DLO);
Controllers – контроллеры (управляющие элементы, DLC);
File Export, File Import и File List – экспорт, импорт и список файлов (DLE, DLI);
Global Utility Plug-Ins – глобальные утилиты (GUP);
Helper Objects – помощники (DLO);
IK Solvers – решатели инверсной кинематики (DLC);
Image Filter / Compositor – фильтры (редакторы) образов (FLT);
Image Loader / Saver – загрузка и сохранение образов (BMI);
Image Viewer – просмотр образов (DLF);
Lights – источники света (DLO);
Manipulators – манипуляторы (DLO);
Materials – материалы (DLT);
Modifiers – модификаторы (DLM);
NURBS Objects – неоднородные рациональные сплайны Безье (DLO);
Particle Systems / Effects – системы частиц и эффекты на основе частиц (DLO);
Patch Objects – патчи (кусочные объекты, DLO);
Procedural Objects – процедурные объекты, например стандартные примитивы (DLO);
Renderer – воспроизведение изображения (DLR);
Rendering Effects – эффекты при воспроизведении изображения (DLV);
Samplers – образцы (DLH);
Shaders – шейдеры (определяют цветовые характеристики объекта, DLB);
Shadow Generator – генераторы теней (DLO);
Skin Deformer Gizmo – контейнеры модификаторов кожи (DLM);
Sound Plug-ins – звуки (DLO);
Space Warps – пространственные деформации (DLM);
Textures 2D, Textures 3D – двумерные и трехмерные текстуры (DLT);
Track View Utility – утилиты обозревателя дорожек (DLU);
Utility – утилиты (DLU).
После уяснения задачи написание SDK-плагина, как правило, предполагает создание надлежащего интерфейса пользователя и реализацию намеченных процедур. Например, плагин gSphere.dlo обеспечивает приведенный на рис. 2 интерфейс и программно поддерживает соответствующую реакцию приложения на предусмотренные интерфейсом действия.
Рис. 2. Пользовательский интерфейс плагина gSphere.dlo
При разработке SDK-плагинов каждая версия 3ds Max предполагает использование соответствующей версии Microsoft Visual Studio, что отражено в следующей таблице: Версия 3ds Max Операционная система
(32 и 64 бит) Совместимые версии
3ds Max SDK Microsoft Visual C++
версия компилятора
2011 Windows 7
Windows Vista
Windows XP Pro SP2 2011, 2010 Visual C++ 9.0 (Visual Studio 2008) Service Pack 1
с установленным от 28 июля 2009 security patch
2010 Windows Vista
Windows XP Pro SP2 2010 Visual C++ 9.0 (Visual Studio 2008) Service Pack 1
2009 Windows Vista
Windows XP Pro SP2 2009 Visual C++ 8.0 (Visual Studio 2005) Service Pack 1
Постановка задачи
Порядок разработки плагина рассмотрим на следующем примере: создать плагин, формирующий примитив куб (Cube).
Такой простой объект отвечает цели урока, заключающейся в демонстрации технологической цепочки разработки SDK-плагинов.
Примитив имеет один параметр Size, для управления которым используется редактируемое поле со счетчиком (рис. 3).
Рис. 3. Интерфейс плагина Cube
Как и другие примитивы, куб вводится в сцену мышкой с прижатой левой кнопкой.
MAXScript реализация плагина
Одну и ту же задачу можно решить средствами 3ds Max SDK и MAXScript. Для иллюстрации этого положения реализуем прежде плагин создания куба на MAXScript, дав плагину имя CubeMS.
plugin simpleObject CubeMS name:"CubeMS" classID:#(145340, 543210) category:"Scripted Primitives" (
parameters main rolloutarams (
size type:#worldUnits ui:size default:0
)
rollout params "Cube Size" (
spinner size "Size: " type:#worldunits range:[0, 100, 0] scale:1
)
on buildMesh do (
h = 0.5 * size
arrVrts = #([-h, -h, -h], [h, -h, -h], [-h, h, -h], [h, h, -h], \
[-h, -h, h], [h, -h, h], [-h, h, h], [h, h, h])
arrFcs = #([1, 3, 4], [4, 2, 1], [5, 6, 8], [8, 7, 5], \
[1, 2, 6], [6, 5, 1], [2, 4, 8], [8, 6, 2], \
[4, 3, 7], [7, 8, 4], [3, 1, 5], [5, 7, 3])
setMesh mesh verts:arrVrts faces:arrFcs
setFaceSmoothGroup mesh 1 2; setFaceNormal mesh 1 [0, 0, -1]
setFaceSmoothGroup mesh 2 2; setFaceNormal mesh 2 [0, 0, -1]
setFaceSmoothGroup mesh 3 4; setFaceNormal mesh 3 [0, 0, 1]
setFaceSmoothGroup mesh 4 4; setFaceNormal mesh 4 [0, 0, 1]
setFaceSmoothGroup mesh 5 8; setFaceNormal mesh 5 [0, -1, 0]
setFaceSmoothGroup mesh 6 8; setFaceNormal mesh 6 [0, -1, 0]
setFaceSmoothGroup mesh 7 16; setFaceNormal mesh 7 [1, 0, 0]
setFaceSmoothGroup mesh 8 16; setFaceNormal mesh 8 [1, 0, 0]
setFaceSmoothGroup mesh 9 32; setFaceNormal mesh 9 [0, 1, 0]
setFaceSmoothGroup mesh 10 32; setFaceNormal mesh 10 [0, 1, 0]
setFaceSmoothGroup mesh 11 64; setFaceNormal mesh 11 [-1, 0, 0]
setFaceSmoothGroup mesh 12 64; setFaceNormal mesh 12 [-1, 0, 0]
for k = 1 to 12 do setEdgeVis mesh k 3 false
)
tool create (
on mousePoint click do
case click of (
1: nodeTM.Translation = gridPoint
3: #stop
)
on mouseMove click do
case click of (
2: size = amax gridDist.X gridDist.Y
3: size = gridDist.Z
)
)
)
Программа содержит секцию (Rollout) params, обеспечивающую задание размера куба (счетчик Size). Значение счетчика связано с одноименным параметром, заданным в блоке Parameters.
Инструмент создания куба (мышка) задается блоком Tool Create. После выбора позиции (событие mousePoint с параметром click = 1) определяется часть Translation (перемещение) матрицы аффинных преобразований куба (nodeTM.Translation = gridPoint). Далее при нажатой левой кнопке мыши фиксируется ее перемещение в видовом порте; величина перемещения определяет размер куба.
После освобождения мыши сцена может принять очередной куб.
Родительским классом куба является класс SimpleObject. Класс куба имеет имя CubeMS.
Для получения идентификатора класса classID следует употребить имеющуюся в папке ..\Autodesk\3ds Max 20хх SDK\maxsdk\help программу gencid.exe (рис. 4).
Рис. 4. Генератор идентификатора класса плагина
Параметризованный куб создается обработчиком buildMesh в результате применения метода SetMesh, получающего массив arrVrts с координатами вершин примитива и массив его граней arrFcs. Размер куба определяется значением параметра Size. Сглаживающие группы и нормали куба заданы по аналогии с примитивом Box.
После копирования и запуска кода в MAXScript Editor, плагин будет доступен на вкладке Create – Geometry – Scripted Primitives (рис. 5).
Рис. 5. Вызов плагина CubeMS
Категория (Scripted Primitives) и положение элемента в командном окне определяются параметрами выражения Plugin. Так, класс SimpleObject указывает на принадлежность примитива к геометрическим объектам, понятно и назначение свойства Category.
После загрузки плагина кубом можно оперировать средствами языка MAXScript, например:
delete $*
cb = cubeMS size:40
animate on at time 100 (
cb.Size = 60
rotate cb 360 [0, 0, 1]
)
playAnimation()
Заметим, что созданный объект не имеет текстурных координат, поэтому при употреблении материала следует позаботиться о создании таких координат, например при помощи модификатора UVWmap:
delete $*
cb = cubeMS size:50
addModifier cb (UVWmap maptype:4 uin)
chk = checker()
chk.Coordinates.U_Tiling = chk.Coordinates.V_Tiling = 2
std = standard diffuseMap:chk showInViewport:true diffuseMapEnable:true
cb.Material = std
Настройка помощника Plug-in Wizard
Необходимые для использования помощника файлы расположены в папке MAXSDK\Howto\3DSMaxPluginWizard.
Откроем в текстовом редакторе имеющийся в этой папке файл 3dsmaxPluginWizard.vsz и определим в нем следующее значение параметра:
Param="ABSOLUTE_PATH = C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\howto\3dsmaxPluginWizard"
То есть укажем полный путь к папке с файлами помощника. Сохраним изменения и закроем файл.
Оставаясь в этой папке, скопируем три следующие файла:
3dsmaxPluginWizard.ico;
3dsmaxPluginWizard.vsdir;
3dsmaxPluginWizard.vsz
и вставим их в VC/vcprojects директорию установки Microsoft Visual Studio (это может быть C:\Program Files\Microsoft Visual Studio 5\VC\vcprojects).
Этого достаточно, чтобы 3ds Max Plug-in Wizard оказался доступным как шаблон в Microsoft Visual Studio.
Проверим это, запустив Visual Studio и выбрав File > Newrojects > Visual C++ > 3ds Max Plug-in Wizard (рис. 6).
Рис. 6. Создание проекта Visual C++ с помощью 3ds Max Plug-in Wizard
Порядок создания 3ds Max SDK-плагина
После разработки проекта плагина и оформления проекта, например, в виде технического задания запускается Microsoft Visual Studio, где и выполняются все последующие действия.
В проекте SDK-плагина полезно указать следующие характеристики: Характеристика плагина Пример значения
Имя файла cube.dlo
Идентификатор класса утилиты Class_ID(0xd667c5aa, 0xb65e9ddb)
Описание IDS_LIBDESCRIPTION "Cube"
Категория IDS_CATEGORY "SDK simple object"
Имя класса IDS_CLASS_NAME "Cube"
Интерфейс пользователя, предоставляемый плагином, сформируем в соответствии с рис. 7, добавив возможность ручного ввода (Keyboard Entry) примитива Cube.
Рис. 7. Уточненный пользовательский интерфейс плагина
При вводе посредством нажатия на кнопку Create центр куба будет размещен в начале мировой системы координат.
Создадим теперь в Microsoft Visual Studio проект C++ Win32, компиляция и сборка которого (Compile and Link) обеспечат создание запрошенного плагина.
Проект создается как многониточная библиотека (Multy-threaded DLL). Используется гибридная (Hybrid) конфигурация, пригодная и для отладки (Debugging), и для построения готового решения (Solution).
Создание нового проекта
Запустим Visual Studio и используем для создания проекта помощник 3ds Max Plug-in Wizard (см. рис. 6). В поле Name введем имя Cube, а в поле Location укажем, например, имя папки C:\sdk. Снимем флажок Create directory for solution. Нажмем на ОК и в открывшемся диалоге выберем Procedural Objects (процедурные объекты, рис. 8).
Рис. 8. Выбор вида плагина
Нажмем на Next и введем в появившемся диалоге указанные на рис. 9 значения.
Рис. 9. Детализация описания плагина Cube. В качестве базового выбран класс SimpleObject2
Нажмем на Next и в появившемся диалоге проверим наличие указанных на рис. 10 значений.
Рис. 10. Некоторые детали проекта
В поле MAXSDK path указан путь
C:\Program Files\Autodesk\3ds Max 9 SDK\maxsdk
а в поле 3dsmax.exe path указан путь
C:\Program Files\Autodesk\3ds Max 2009
Ваши значения могут быть иными.
Нажмем на кнопку Finish.
Свойства (Properties) проекта Cube
Практически все свойства проекта Cube будут установлены помощником. Наша задача просмотреть эти свойства и внести незначительные коррективы.
На вкладке Solution Explorer расположится дерево решения (рис. 11).
Рис. 11. Дерево решения Cube
Первый заголовочный файл 3dsmaxsdk_preinclude.h удален, а файл cube.h приведен к следующему виду:
#include "Max.h"
#include "resource.h"
#include "istdplug.h"
#include "iparamb2.h"
#include "iparamm2.h"
#include "Simpobj.h"
extern TCHAR *GetString(int id);
extern HINSTANCE hInstance;
Удаление файла 3dsmaxsdk_preinclude.h потребует изъятия всех #pragma message из файла cube.cpp. Такие куски кода появятся в файле, если в качестве базового класса выбрать GeomObject.
Добавим теперь в проект конфигурацию Hybrid.
Выберем в дереве проекта вершину cube (см. рис. 11), нажмем на правую кнопку мыши и в появившемся меню выберем Properties.
В открывшемся окне нажмем на кнопку Configuration Manager и в списке Active Solution Configuration добавим новый вид конфигурации Hybrid; этот же вид выберем и в нижерасположенной таблице диалога (рис. 12).
Рис. 12. Добавление конфигурации Hybrid
Далее все настройки будут выполнены для этой конфигурации.
Ветвь Configuration Properties – General после внесенных изменений будет содержать следующие сведения (рис. 13):
Рис. 13. Ветвь Configuration Properties – General
Переместимся в ветвь C++ – General. В поле Additional Include Directories проверим путь к include-директории 3ds Max SDK:
"C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\include"
В вашем случае путь может быть иным. Если путь содержит пробелы, то его нужно заключить в кавычки.
Прочие поля диалога оставим без изменений. Нажмем на кнопку Применить.
В ветви C++ – Command Line поле Additional options (дополнительные опции) вставим следующие значения:
/GR /we4706 /we4390 /we4557 /we4546 /we4545 /we4295 /we4310 /we4130 /we4611 /we4213 /we4121 /w34701 /wd4244 /wd4018
Они взяты из файла AdditionalCompilerOptions.txt, имеющегося в поставке 3ds Max SDK. Применить.
Имя выходного файла (создаваемого плагина) найдем в ветви Linker – General – Output File. В рассматриваемом примере помощник указал имя C:\sdk\cube.dlo.
Проверим путь к SDK библиотекам (Additional Library Directories):
"C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\lib"
Если путь имеет пробелы, то его следует заключить в кавычки. Применить.
Прочие значения свойств проекта оставим без изменений.
Файл ресурсов cube.rc
В этом файле создадим указанные на вышеприведенном рис. 7 диалоги Keyboard Entry и Parameters. Также отредактируем таблицу символов (String Table) с идентификаторами ресурса.
Перейдем в Visual Studio на вкладку Resource View. Откроем созданную помощником заготовку диалога IDD_PANEL, выберем форму диалога, в окне свойств изменим его идентификатор (свойство ID) на IDD_KBRD, а саму форму диалога приведем к следующему виду (рис. 14):
Рис. 14. Форма диалога IDD_KBRD
Этот диалог будет употреблен для ручного ввода примитива. Его размер 108*63 единицы (пикселя).
Свойства (ID и Caption) существующих в заготовке элементов (текст, поле ввода и счетчик) установим в соответствии с рис 15.
Рис. 15. Свойства элементов диалога IDD_KBRD
Ниже этих полей добавим кнопку класса CustButton (пользовательский класс). Это можно сделать, употребив инструмент Custom Control и приведя свойства (Caption, Class, ID и Style) добавленного элемента в соответствие с рис. 16.
Рис. 16. Добавление и настройка кнопки Create
Выделим теперь в дереве файла cube.rc ветвь IDD_KBRD, выполним ее копирование и вставку. Изменим идентификатор добавленного диалога на IDD_PARAMS (рис. 17), а его форму и свойства его элементов установим в соответствии с рис. 18.
Рис. 17. Добавлен диалог IDD_PARAMS
Рис. 18. Свойства элементов диалога IDD_PARAMS
Автор: catBurdger
Введение
В уроке рассматривается технологическая цепочка создания плагина 3ds Max в среде Microsoft Visual Studio с употреблением 3ds Max SDK и языка программирования C++. Также реализуется MAXScript-версия плагина. Предоставляемый материал – это лишь начальная точка на пути освоения техники разработки 3ds Max SDK-плагинов.
Урок подготовлен по заявкам пользователей Render.ru.
Плагин – это программный модуль, подключаемый к основной программе и либо реализующий часть функционала основной программы, либо расширяющий ее возможности.
Так, в 3ds Max к первой группе плагинов относятся стандартные плагины, хранящиеся в папке stdplugs и загружаемые при запуске приложения. Их список отображается в приведенном на рис. 1 диалоге Plug-in Manager (меню Customize – Plug-in Manager).
Рис. 1. Plug-in Manager
Эти плагины, их около 350, реализуют значительную часть функционала 3ds Max. Например, плагин prim.dlo обеспечивает создание стандартных примитивов, сплайнов и стандартных источников света.
Прочие, нестандартные плагины предпочтительнее размещать в других папках и загружать по мере необходимости.
3ds Max SDK (Solution Development Kit, инструментарий разработчика) имеется в профессиональной версии 3ds Max и содержит заголовочные и библиотечные файлы, обеспечивающие доступ к классам и другим данным 3ds Max. Кроме того, в поставке имеется помощник и большое число примеров.
Плагин 3ds Max может быть написан на языке MAXScript и на языке C++ с употреблением 3ds Max SDK.
В первом случае плагин создается в среде 3ds Max, а во втором – в среде Microsoft Visual Studio.
Во многих случаях MAXScript может обеспечить такой же функционал, как и SDK. Однако скорость SDK-плагинов выше.
SDK-плагин – это откомпилированный и собранный dll-файл C++ (DLL, Dynamic Linked Library, динамически подключаемая библиотека). Рекомендованное расширение файла зависит от назначения плагина. В стандартной поставке 3ds Max плагины, оперирующие материалами и их картами, имеют расширение DLT, а плагинам, создающим объекты, дается расширение DLO, плагины-модификаторы выделяются расширением DLM и так далее.
Поставка 3ds Max SDK включает помощник создания плагинов Plug-in Wizard. Он поддерживает (или планирует поддерживать) создание около 40 следующих видов плагинов (в скобках указывается стандартное расширение):
Anti-Aliasing Filters – фильтры, сглаживающие изображение (DLK);
Atmospheric – атмосферные эффекты (DLV);
Cameras – камеры (DLO);
Color Selector – выбор цвета (DLU);
Construction Grid Objects – создание сеточных объектов (DLO);
Controllers – контроллеры (управляющие элементы, DLC);
File Export, File Import и File List – экспорт, импорт и список файлов (DLE, DLI);
Global Utility Plug-Ins – глобальные утилиты (GUP);
Helper Objects – помощники (DLO);
IK Solvers – решатели инверсной кинематики (DLC);
Image Filter / Compositor – фильтры (редакторы) образов (FLT);
Image Loader / Saver – загрузка и сохранение образов (BMI);
Image Viewer – просмотр образов (DLF);
Lights – источники света (DLO);
Manipulators – манипуляторы (DLO);
Materials – материалы (DLT);
Modifiers – модификаторы (DLM);
NURBS Objects – неоднородные рациональные сплайны Безье (DLO);
Particle Systems / Effects – системы частиц и эффекты на основе частиц (DLO);
Patch Objects – патчи (кусочные объекты, DLO);
Procedural Objects – процедурные объекты, например стандартные примитивы (DLO);
Renderer – воспроизведение изображения (DLR);
Rendering Effects – эффекты при воспроизведении изображения (DLV);
Samplers – образцы (DLH);
Shaders – шейдеры (определяют цветовые характеристики объекта, DLB);
Shadow Generator – генераторы теней (DLO);
Skin Deformer Gizmo – контейнеры модификаторов кожи (DLM);
Sound Plug-ins – звуки (DLO);
Space Warps – пространственные деформации (DLM);
Textures 2D, Textures 3D – двумерные и трехмерные текстуры (DLT);
Track View Utility – утилиты обозревателя дорожек (DLU);
Utility – утилиты (DLU).
После уяснения задачи написание SDK-плагина, как правило, предполагает создание надлежащего интерфейса пользователя и реализацию намеченных процедур. Например, плагин gSphere.dlo обеспечивает приведенный на рис. 2 интерфейс и программно поддерживает соответствующую реакцию приложения на предусмотренные интерфейсом действия.
Рис. 2. Пользовательский интерфейс плагина gSphere.dlo
При разработке SDK-плагинов каждая версия 3ds Max предполагает использование соответствующей версии Microsoft Visual Studio, что отражено в следующей таблице: Версия 3ds Max Операционная система
(32 и 64 бит) Совместимые версии
3ds Max SDK Microsoft Visual C++
версия компилятора
2011 Windows 7
Windows Vista
Windows XP Pro SP2 2011, 2010 Visual C++ 9.0 (Visual Studio 2008) Service Pack 1
с установленным от 28 июля 2009 security patch
2010 Windows Vista
Windows XP Pro SP2 2010 Visual C++ 9.0 (Visual Studio 2008) Service Pack 1
2009 Windows Vista
Windows XP Pro SP2 2009 Visual C++ 8.0 (Visual Studio 2005) Service Pack 1
Постановка задачи
Порядок разработки плагина рассмотрим на следующем примере: создать плагин, формирующий примитив куб (Cube).
Такой простой объект отвечает цели урока, заключающейся в демонстрации технологической цепочки разработки SDK-плагинов.
Примитив имеет один параметр Size, для управления которым используется редактируемое поле со счетчиком (рис. 3).
Рис. 3. Интерфейс плагина Cube
Как и другие примитивы, куб вводится в сцену мышкой с прижатой левой кнопкой.
MAXScript реализация плагина
Одну и ту же задачу можно решить средствами 3ds Max SDK и MAXScript. Для иллюстрации этого положения реализуем прежде плагин создания куба на MAXScript, дав плагину имя CubeMS.
plugin simpleObject CubeMS name:"CubeMS" classID:#(145340, 543210) category:"Scripted Primitives" (
parameters main rolloutarams (
size type:#worldUnits ui:size default:0
)
rollout params "Cube Size" (
spinner size "Size: " type:#worldunits range:[0, 100, 0] scale:1
)
on buildMesh do (
h = 0.5 * size
arrVrts = #([-h, -h, -h], [h, -h, -h], [-h, h, -h], [h, h, -h], \
[-h, -h, h], [h, -h, h], [-h, h, h], [h, h, h])
arrFcs = #([1, 3, 4], [4, 2, 1], [5, 6, 8], [8, 7, 5], \
[1, 2, 6], [6, 5, 1], [2, 4, 8], [8, 6, 2], \
[4, 3, 7], [7, 8, 4], [3, 1, 5], [5, 7, 3])
setMesh mesh verts:arrVrts faces:arrFcs
setFaceSmoothGroup mesh 1 2; setFaceNormal mesh 1 [0, 0, -1]
setFaceSmoothGroup mesh 2 2; setFaceNormal mesh 2 [0, 0, -1]
setFaceSmoothGroup mesh 3 4; setFaceNormal mesh 3 [0, 0, 1]
setFaceSmoothGroup mesh 4 4; setFaceNormal mesh 4 [0, 0, 1]
setFaceSmoothGroup mesh 5 8; setFaceNormal mesh 5 [0, -1, 0]
setFaceSmoothGroup mesh 6 8; setFaceNormal mesh 6 [0, -1, 0]
setFaceSmoothGroup mesh 7 16; setFaceNormal mesh 7 [1, 0, 0]
setFaceSmoothGroup mesh 8 16; setFaceNormal mesh 8 [1, 0, 0]
setFaceSmoothGroup mesh 9 32; setFaceNormal mesh 9 [0, 1, 0]
setFaceSmoothGroup mesh 10 32; setFaceNormal mesh 10 [0, 1, 0]
setFaceSmoothGroup mesh 11 64; setFaceNormal mesh 11 [-1, 0, 0]
setFaceSmoothGroup mesh 12 64; setFaceNormal mesh 12 [-1, 0, 0]
for k = 1 to 12 do setEdgeVis mesh k 3 false
)
tool create (
on mousePoint click do
case click of (
1: nodeTM.Translation = gridPoint
3: #stop
)
on mouseMove click do
case click of (
2: size = amax gridDist.X gridDist.Y
3: size = gridDist.Z
)
)
)
Программа содержит секцию (Rollout) params, обеспечивающую задание размера куба (счетчик Size). Значение счетчика связано с одноименным параметром, заданным в блоке Parameters.
Инструмент создания куба (мышка) задается блоком Tool Create. После выбора позиции (событие mousePoint с параметром click = 1) определяется часть Translation (перемещение) матрицы аффинных преобразований куба (nodeTM.Translation = gridPoint). Далее при нажатой левой кнопке мыши фиксируется ее перемещение в видовом порте; величина перемещения определяет размер куба.
После освобождения мыши сцена может принять очередной куб.
Родительским классом куба является класс SimpleObject. Класс куба имеет имя CubeMS.
Для получения идентификатора класса classID следует употребить имеющуюся в папке ..\Autodesk\3ds Max 20хх SDK\maxsdk\help программу gencid.exe (рис. 4).
Рис. 4. Генератор идентификатора класса плагина
Параметризованный куб создается обработчиком buildMesh в результате применения метода SetMesh, получающего массив arrVrts с координатами вершин примитива и массив его граней arrFcs. Размер куба определяется значением параметра Size. Сглаживающие группы и нормали куба заданы по аналогии с примитивом Box.
После копирования и запуска кода в MAXScript Editor, плагин будет доступен на вкладке Create – Geometry – Scripted Primitives (рис. 5).
Рис. 5. Вызов плагина CubeMS
Категория (Scripted Primitives) и положение элемента в командном окне определяются параметрами выражения Plugin. Так, класс SimpleObject указывает на принадлежность примитива к геометрическим объектам, понятно и назначение свойства Category.
После загрузки плагина кубом можно оперировать средствами языка MAXScript, например:
delete $*
cb = cubeMS size:40
animate on at time 100 (
cb.Size = 60
rotate cb 360 [0, 0, 1]
)
playAnimation()
Заметим, что созданный объект не имеет текстурных координат, поэтому при употреблении материала следует позаботиться о создании таких координат, например при помощи модификатора UVWmap:
delete $*
cb = cubeMS size:50
addModifier cb (UVWmap maptype:4 uin)
chk = checker()
chk.Coordinates.U_Tiling = chk.Coordinates.V_Tiling = 2
std = standard diffuseMap:chk showInViewport:true diffuseMapEnable:true
cb.Material = std
Настройка помощника Plug-in Wizard
Необходимые для использования помощника файлы расположены в папке MAXSDK\Howto\3DSMaxPluginWizard.
Откроем в текстовом редакторе имеющийся в этой папке файл 3dsmaxPluginWizard.vsz и определим в нем следующее значение параметра:
Param="ABSOLUTE_PATH = C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\howto\3dsmaxPluginWizard"
То есть укажем полный путь к папке с файлами помощника. Сохраним изменения и закроем файл.
Оставаясь в этой папке, скопируем три следующие файла:
3dsmaxPluginWizard.ico;
3dsmaxPluginWizard.vsdir;
3dsmaxPluginWizard.vsz
и вставим их в VC/vcprojects директорию установки Microsoft Visual Studio (это может быть C:\Program Files\Microsoft Visual Studio 5\VC\vcprojects).
Этого достаточно, чтобы 3ds Max Plug-in Wizard оказался доступным как шаблон в Microsoft Visual Studio.
Проверим это, запустив Visual Studio и выбрав File > Newrojects > Visual C++ > 3ds Max Plug-in Wizard (рис. 6).
Рис. 6. Создание проекта Visual C++ с помощью 3ds Max Plug-in Wizard
Порядок создания 3ds Max SDK-плагина
После разработки проекта плагина и оформления проекта, например, в виде технического задания запускается Microsoft Visual Studio, где и выполняются все последующие действия.
В проекте SDK-плагина полезно указать следующие характеристики: Характеристика плагина Пример значения
Имя файла cube.dlo
Идентификатор класса утилиты Class_ID(0xd667c5aa, 0xb65e9ddb)
Описание IDS_LIBDESCRIPTION "Cube"
Категория IDS_CATEGORY "SDK simple object"
Имя класса IDS_CLASS_NAME "Cube"
Интерфейс пользователя, предоставляемый плагином, сформируем в соответствии с рис. 7, добавив возможность ручного ввода (Keyboard Entry) примитива Cube.
Рис. 7. Уточненный пользовательский интерфейс плагина
При вводе посредством нажатия на кнопку Create центр куба будет размещен в начале мировой системы координат.
Создадим теперь в Microsoft Visual Studio проект C++ Win32, компиляция и сборка которого (Compile and Link) обеспечат создание запрошенного плагина.
Проект создается как многониточная библиотека (Multy-threaded DLL). Используется гибридная (Hybrid) конфигурация, пригодная и для отладки (Debugging), и для построения готового решения (Solution).
Создание нового проекта
Запустим Visual Studio и используем для создания проекта помощник 3ds Max Plug-in Wizard (см. рис. 6). В поле Name введем имя Cube, а в поле Location укажем, например, имя папки C:\sdk. Снимем флажок Create directory for solution. Нажмем на ОК и в открывшемся диалоге выберем Procedural Objects (процедурные объекты, рис. 8).
Рис. 8. Выбор вида плагина
Нажмем на Next и введем в появившемся диалоге указанные на рис. 9 значения.
Рис. 9. Детализация описания плагина Cube. В качестве базового выбран класс SimpleObject2
Нажмем на Next и в появившемся диалоге проверим наличие указанных на рис. 10 значений.
Рис. 10. Некоторые детали проекта
В поле MAXSDK path указан путь
C:\Program Files\Autodesk\3ds Max 9 SDK\maxsdk
а в поле 3dsmax.exe path указан путь
C:\Program Files\Autodesk\3ds Max 2009
Ваши значения могут быть иными.
Нажмем на кнопку Finish.
Свойства (Properties) проекта Cube
Практически все свойства проекта Cube будут установлены помощником. Наша задача просмотреть эти свойства и внести незначительные коррективы.
На вкладке Solution Explorer расположится дерево решения (рис. 11).
Рис. 11. Дерево решения Cube
Первый заголовочный файл 3dsmaxsdk_preinclude.h удален, а файл cube.h приведен к следующему виду:
#include "Max.h"
#include "resource.h"
#include "istdplug.h"
#include "iparamb2.h"
#include "iparamm2.h"
#include "Simpobj.h"
extern TCHAR *GetString(int id);
extern HINSTANCE hInstance;
Удаление файла 3dsmaxsdk_preinclude.h потребует изъятия всех #pragma message из файла cube.cpp. Такие куски кода появятся в файле, если в качестве базового класса выбрать GeomObject.
Добавим теперь в проект конфигурацию Hybrid.
Выберем в дереве проекта вершину cube (см. рис. 11), нажмем на правую кнопку мыши и в появившемся меню выберем Properties.
В открывшемся окне нажмем на кнопку Configuration Manager и в списке Active Solution Configuration добавим новый вид конфигурации Hybrid; этот же вид выберем и в нижерасположенной таблице диалога (рис. 12).
Рис. 12. Добавление конфигурации Hybrid
Далее все настройки будут выполнены для этой конфигурации.
Ветвь Configuration Properties – General после внесенных изменений будет содержать следующие сведения (рис. 13):
Рис. 13. Ветвь Configuration Properties – General
Переместимся в ветвь C++ – General. В поле Additional Include Directories проверим путь к include-директории 3ds Max SDK:
"C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\include"
В вашем случае путь может быть иным. Если путь содержит пробелы, то его нужно заключить в кавычки.
Прочие поля диалога оставим без изменений. Нажмем на кнопку Применить.
В ветви C++ – Command Line поле Additional options (дополнительные опции) вставим следующие значения:
/GR /we4706 /we4390 /we4557 /we4546 /we4545 /we4295 /we4310 /we4130 /we4611 /we4213 /we4121 /w34701 /wd4244 /wd4018
Они взяты из файла AdditionalCompilerOptions.txt, имеющегося в поставке 3ds Max SDK. Применить.
Имя выходного файла (создаваемого плагина) найдем в ветви Linker – General – Output File. В рассматриваемом примере помощник указал имя C:\sdk\cube.dlo.
Проверим путь к SDK библиотекам (Additional Library Directories):
"C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\lib"
Если путь имеет пробелы, то его следует заключить в кавычки. Применить.
Прочие значения свойств проекта оставим без изменений.
Файл ресурсов cube.rc
В этом файле создадим указанные на вышеприведенном рис. 7 диалоги Keyboard Entry и Parameters. Также отредактируем таблицу символов (String Table) с идентификаторами ресурса.
Перейдем в Visual Studio на вкладку Resource View. Откроем созданную помощником заготовку диалога IDD_PANEL, выберем форму диалога, в окне свойств изменим его идентификатор (свойство ID) на IDD_KBRD, а саму форму диалога приведем к следующему виду (рис. 14):
Рис. 14. Форма диалога IDD_KBRD
Этот диалог будет употреблен для ручного ввода примитива. Его размер 108*63 единицы (пикселя).
Свойства (ID и Caption) существующих в заготовке элементов (текст, поле ввода и счетчик) установим в соответствии с рис 15.
Рис. 15. Свойства элементов диалога IDD_KBRD
Ниже этих полей добавим кнопку класса CustButton (пользовательский класс). Это можно сделать, употребив инструмент Custom Control и приведя свойства (Caption, Class, ID и Style) добавленного элемента в соответствие с рис. 16.
Рис. 16. Добавление и настройка кнопки Create
Выделим теперь в дереве файла cube.rc ветвь IDD_KBRD, выполним ее копирование и вставку. Изменим идентификатор добавленного диалога на IDD_PARAMS (рис. 17), а его форму и свойства его элементов установим в соответствии с рис. 18.
Рис. 17. Добавлен диалог IDD_PARAMS
Рис. 18. Свойства элементов диалога IDD_PARAMS