Render.ru

Как подружить plug-in на C++ MAX SDK с кнопкой на toolbar

#1
Я написал плагин (объект) в MAX SDK соответственно на C++ и кнопка для его создания появилась на Create панели.
Но как связать запуск создания с кнопкой на тулбаре - пытался разобраться то вобщем скрипт то не сложный, но для стандартных максовских объектов он вызывает то ли порожденные от них скрипт-объекты то ли wrapper объекты.
Например в одном таком скрипте для кнопки команда:
StartObjectCreation Spotlight , но в макс сдк такого объекта нет - он называется чут-чуть по-дугому. А чуть-чуть тут не проходит.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Метод StartObjectCreation <maxobjclass> эмулирует нажатие кнопки в Create Panel для твоего класса обьекта.

Точно узнать класс своего обьекта можеш с помощью фн. - classOf $
Хотя если сам писал то должен знать.

В остальном обыкновенный макроскрипт:

macroScript Target_Camera category:"Cameras"
tooltip:"Targeted Camera" Icon:#("Cameras",1)
(
StartObjectCreation TargetCamera
)
 
#3
Дело обстоит вот как:
В максе все источники света представлены одним классом GeneralLight, то что мы ставляем в сцену - один клас, но с различными параметрами - тип, mesh.
Для связи плагин объектов с максом существует дескриптор классов ClassDesc, который имеет метод Create() - который вызывается для создания объекта.
Для источников света порождено несколько дескрипторов - по одному для каждого типа, которые обозваны приблизительно так: OmniLightClassDesc,
SpotLightClassDecs итд. А метод Create() каждого из них содержит нечто вроде return new GeneralLight(int тип источника);

Тоесть нет никакой связи всего вышеописанного с

StartObjectCreation Spotlight

Даже имени такого Spotlight в макс сдк не существует.
Хотя есть похожие имена типа OmniLight, SpotLight но они связанны с классом ObjLightDeesc - который имеет отношение только к рендерингу, и возвращается GeneralLight::GetObjLightDesc() только в начале рендеринга - то есть к созданию источника света никакого отношения не не имеет.

Хотя нашел в SDK Help какие-то разделы посвященные скриптам - стр. 40-50
буду читать
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
Да с источниками света там намудрили малость.
MAXClass можно прописать для скрипта более детально
что повидемому и сделали со светом,

MAXClass box
("Box", Class_ID(BOXOBJ_CLASS_ID, 0), GEOMOBJECT_CLASS_ID, &geom_class, 0,
accessors,
paramblock,
"length", BOXOBJ_LENGTH, TYPE_FLOAT, 25.0,
................
end,
end,
end

);

Более детальный пример есть в testdlx\tester.cpp
Если не секрет что будет за лампочка ?
 
#5
Спасибо за помощь - бкду пробовать.
Да вот пытаюсь написать рендерер. Ядро вроде уже как бы сделал, хотя оно еще очень нуждается в доработке - улучшить структуры данных и т.д. Пока нет сглаживания. Скорость для eye rays по сравнению с металом - если у ментала настройка самплинга [-1;0] - 0.67 самплов на пиксель - то скорость у меня выше на 5%, если настройка [0;0] - 1.06 самплов на пиксель то скорость у меня выше на 15-20%. Для отраженных и преломленных лучей скорость вобщем то сравнима с mental и VRay. Хотя есть еще некоторые глюки.
Для ускорения использовал двухуровневое bsp-дерево (дерево кластеров и bsp внутри каждого кластера). Еще реализовал HLCTS (использование общих путей траверсинга для когерентных лучей) для дерева кластеров, хотя это не принесло того результата, что я ожидал - всего 1-2% ускореня. Возможно если ее реализовать еще и внутри кластеров это еще даст 3-4%, но это позже.
А лампочка должна стать AreaLight. Хотя пока я на стадии передирания интерфейса. А их то около 5000 строчек.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#6
Рендер это хорошо.
Но пока до самого интереного не добрался :)

PS
Нужно будет потестить пиши.
 
Сверху