3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> FAQ по MaxSDK, Архитектура, понятия, методы, примеры и т.д.
suprunai
сообщение 24/10/2009, 11:34
Сообщение #1


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 11
Регистрация: 24/10/2009
Пользователь №: 73 795



Предлагаю в этой теме рассмотривать нюансы работы в 3ds Max SDK. А именно архитектуру SDK! Понятно, что всё не плохо изложено в справочном руководстве, но при прочтении его всё равно возникает не мало непонятностей, а тому кто плохо владеет техническим английским, понять что-либо в нем ещё труднее! Есть момент в SDK - один из самых важных, я думаю, это Reference System ( я перевел это как "система ссылок"). Из прочитанного я понял следующее:
1. У Reference system есть несколько задач
а. Сообщить всем зависимым объектам сценыо произошедших измененияхили событиях
б. Управлять автоматическим удалением объектов
в. Загрузить и сохранить граф сцены
Большинство ссылок можно увидеть в 3ds Max в окне schematic view. В Reference system есть ReferenceMaker(объект наблюдатель, который содержит ссылки) и Reference Target (тот объект за которым наблюдают). Поскольку наблюдатели могут также быть субъектами наблюдения , поэтому класс ReferenceMaker является подклассом класса Reference Target.

Сейчас меня интересует как же, всё таки, по русски назвать Reference system, ReferenceMaker и Reference Target?


//==============Пусть это будет здесь=====================
3ds max 7 sdk - https://docs.google.com/file/d/0B6U24pd58VX...G4tRURRYnc/edit
3ds max 8 sdk - https://docs.google.com/file/d/0B6U24pd58VX...zdZOVI0YUE/edit
3ds max 9 sdk - https://docs.google.com/file/d/0B6U24pd58VX...3B0Z2ZUUjA/edit
3ds max 2008 sdk - https://docs.google.com/file/d/0B6U24pd58VX...DVyQUR3Zms/edit
3ds max 2009 sdk - https://docs.google.com/file/d/0B6U24pd58VX...01zcHBYcFE/edit
3ds max 2010 sdk - https://docs.google.com/file/d/0B6U24pd58VX...UtiQWJvdGs/edit
3ds max 2011 sdk - https://docs.google.com/file/d/0B6U24pd58VX...HNseUxlQTg/edit
3ds max 2012 sdk - https://docs.google.com/file/d/0B6U24pd58VX...XNVNS1OQ0E/edit

sdk 10 в 1 - http://narod.ru/disk/63303117001.aad7abc76...dk10in1.7z.html

на наводку спасибо SnDEL

Сообщение отредактировал ECXIMER - 18/11/2013, 09:07
Причина редактирования: добавил линки на SDK
Go to the top of the page
 
+Quote Post
MadlasS
сообщение 26/10/2009, 11:29
Сообщение #2


Знаток
Иконка группы

Группа: Пользователи
Сообщений: 259
Регистрация: 25/11/2005
Пользователь №: 18 441



На мой взгляд очень интересная тема, я бы очень хотел чтобы она развивалась.Выкладывали простые примеры кода, обсуждали вопросы и т. д. Я не програмист и мне с SDK тежело разобраться, уже были попытки.Я тоже создавал подобную тему типа вопросы по SDK не пошло может в этот раз.
А зачем по русски? Смысл ты понял.
Да ещё было бы очень здорово если бы найти примеры разобранные построчно ну или по блокам.В SDK на мой взгляд не всё понятно я хотел сделать свой шейп и очень долго разбирался как коменты весьма скудные, хотя возможно это потому что я не профи в програмировании.

Сообщение отредактировал MadlasS - 26/10/2009, 11:34
Go to the top of the page
 
+Quote Post
suprunai
сообщение 26/10/2009, 15:17
Сообщение #3


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 11
Регистрация: 24/10/2009
Пользователь №: 73 795



Я для себя перевожу help по SDK, конспектируя и тренеруясь на примерах, и стараюсь всё записывать, думаю эти записи понадобятся, если будет реальная работа по разработке plug-in'а. Но глядя на то что уже есть, я вдруг подумал, люди пишут уроки, вот и на gamedev-е парочку видел, почему бы не сделать, что-нибудь для других, а как преподнести, чтобы было доходчиво, тут, конечно, проблема. А до этого хочется проверить правильно ли я понимаю, то что перевожу. Пока большинство собственных (не из SDK) примеров работают, значит большую часть я понимаю правильно!

Постараюсь что-нибудь выкладывать!
Go to the top of the page
 
+Quote Post
MadlasS
сообщение 26/10/2009, 18:41
Сообщение #4


Знаток
Иконка группы

Группа: Пользователи
Сообщений: 259
Регистрация: 25/11/2005
Пользователь №: 18 441



А ты пробовал делать, шейп?
Я не пойму, как "каркас"(интерфейс) для всего этого создать, можно это сделать визуально?
Я делал так, брал ректангл из примеров, и под себя его правил, задолбало, захотел один спинер добавить, и довай по коду в 33 местах лазить.Наверно я чего-то не так делаю, хотя тоже работает.
Go to the top of the page
 
+Quote Post
suprunai
сообщение 27/10/2009, 16:49
Сообщение #5


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 11
Регистрация: 24/10/2009
Пользователь №: 73 795



ОК! Shape так shape! Дай время попробую по полочкам разложить!
Go to the top of the page
 
+Quote Post
VaniaVania
сообщение 27/10/2009, 19:38
Сообщение #6


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 10/09/2009
Пользователь №: 72 690



Очень важная тема!! Хэлп по MAX SDK, на мой взгляд, дурацкий - ничего не ясно, комментарии к функциям это просто развёрнутое название функции без объяснения принципиальных вещей, которые она делает. Топики тоже очень фрагментарно описывают работу МАКСа.
Я сейчас постоянно работаю с SDK, по профессии пишу плагины smile.gif И есть вопрос - мне нужно добавить в сцену объекты непосредственно перед рендерингом, а сразу после нужно их удалить. С удалением проблем нет, а вот с добавлением есть. Всё работает, если добавлять объекты при обработке бродкаста NOTIFY_PRE_RENDER. Но я хочу добавлять объекты перед каждым кадром, а после рендеринга кадра сразу удалять, а потом перед рендерингом следующего кадра добавлять опять другие объекты и т.д. Для этих целей есть бродкаст NOTIFY_RENDER_PREEVAL. Но созданные при обработке этого бродкаста объекты в рендеринге не рендерятся, но в сцену добавляются (т.к. если после рендеринга их не удалить, они там появятся).
Добавление объекта в сцену делаю так (клонирую объект, который в ноде pNode):

Код
    Object* pDuplicateObj = NULL;

    // we duplicate object
    switch ( nDuplicateMethod )
    {
    case DUPLICATE_METHOD_COPY:
      pDuplicateObj = dynamic_cast<Object*>( pNode->GetObjectRef()->Clone() );
      break;

    case DUPLICATE_METHOD_INSTANCE:
      pDuplicateObj = pNode->GetObjectRef();
      break;

    case DUPLICATE_METHOD_REFERENCE:
      pDuplicateObj = ::MakeObjectDerivedObject( pNode->GetObjectRef() );
      break;

    default:
      assert( FALSE );
    }

    // we create duplicate object node
    assert( pDuplicateObj );
    pDuplicateNode = pInterface->CreateObjectNode( pDuplicateObj );


Может, нужно позвать ещё какую-нибудь функцию, типа "АпдэйтРендерСцен" smile.gif ? Подскажите! Заранее благодарю.
Go to the top of the page
 
+Quote Post
VaniaVania
сообщение 27/10/2009, 19:43
Сообщение #7


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 10/09/2009
Пользователь №: 72 690



Насчёт перевода названий Reference system, ReferenceMaker, ReferenceTarget и т.д. - я бы эти названия не переводил, т.к. неудобно читать хэлп с русскими названиями, а потом думать, как это написать в коде по-английски.. Да и незачем это - пусть читающие воспринимают названия как абстрактные. Да кодеров без знания английского нет, я думаю, т.к. почти все языки англоязычные.
Go to the top of the page
 
+Quote Post
3DZver
сообщение 28/10/2009, 16:57
Сообщение #8


-.-.-.-.-.-.-.-.-.-.-.-
Иконка группы

Группа: Модераторы
Сообщений: 3 915
Регистрация: 21/06/2002
Из: Нерезиновая
Пользователь №: 128



Действительно, по MaxSDK не так много доступной и понятной страждущим информации. Надеюсь, что эта тема получит дальнейшее развитие, поэтому поднимаю её в "важные".
Go to the top of the page
 
+Quote Post
-=VG=-
сообщение 28/10/2009, 23:12
Сообщение #9


Мастер
Иконка группы

Группа: Участник
Сообщений: 1 431
Регистрация: 09/11/2004
Из: SPb
Пользователь №: 8 229



Не господа, не с того боку начали. Может я и не прав конечно, но пока дойдешь до ReferenceMarcker и т.п - нужно много что другого знать. Я, к своему стыду наверно, даже не знаю толком что они делают :-)

На мой взгляд, "простого смертного", начинать изучать SDK нужно с понимания какие классы соответствуют тем или иным объектам макса, и правильно их уметь наследовать. Весь SDK сделан таким образом, что пока не отнаследуешь нужное - работать не будет.

Я пользуюсь при написании нового плугина Max Wizard. Т.е. шаблоном для создания нового плугина. Он создаст новый клас отнаследованный от нужного класса и пропишет пустые функции, которые нужно потом заполнить своим кодом.
Основная, инициализирующая функция плугина, чтобы Макс увидел плугин, описана обычно в DllEntry.cpp
BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID){...}
там -же должны быть функции обязательные для инициализации плугина в максе - их список в файле *.def
LibClassDesc должна вернуть максу пронициализированный класс ClassDesc2 плугина (т.е. класс который отнаследован от ClassDesc2), который в свою очередь в своем конструктороре инициализирует основной класс модификатора, карты, объекта, рендера и т.п.
Каждый класс который наследуется требует обязательного описания нескольких функций, например имя которое мы видим в максе, тип, что он возращает, и т.п. у кажого свои, но они обязательны.

Вот пока не разберешься с ClassDesc2, как он наследуется, что он инициализируе - про Referenc можно забыть пока.
Go to the top of the page
 
+Quote Post
MadlasS
сообщение 29/10/2009, 12:26
Сообщение #10


Знаток
Иконка группы

Группа: Пользователи
Сообщений: 259
Регистрация: 25/11/2005
Пользователь №: 18 441



Странно но у меня Визард не работае, может потому что студия 2008, а не 2005?
На сколько я помню в 2005 работал, но там далеко не все типы плагов поддерживались,обнавлений небыло?

и ещё по поводу сплайнов.Можна както вызвать функцию булеан, для двух сплайнов?
на сколько я понял у SplineShape есть френд SSBolean.. (как то так) и он возвращает SplineShape, но как этим воспользоваться я не пойму.Как вообше эо работает? Булеан, атач.Только по Pick. Можно что-то вроде:
Boolean(Splineshape *ss1,Splineshape *ss2,int operation)

P.S.
Огромное спасибо 3DZver за подём темы.
Огромное спасибоVG, что делится своим опытом, так держать.

Сообщение отредактировал MadlasS - 29/10/2009, 12:33
Go to the top of the page
 
+Quote Post
VaniaVania
сообщение 29/10/2009, 13:17
Сообщение #11


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 10/09/2009
Пользователь №: 72 690



Я использую MAX SDK 2010, для него вообще нужна студия 2009...

Ребята, ещё раз поднимаю вопрос, который был 5-ю постами ранее - вопрос про то, что если добавить объекты в сцену непосредственно перед рендерингом, то они в сцене появятся, но не отрендерятся. Очень нужно решить проблему... а после этого готов по мере возможности ответить на интересующие вопросы по MAX SDK smile.gif, ибо опыт накопился уже немалый

Сообщение отредактировал VaniaVania - 29/10/2009, 13:45
Go to the top of the page
 
+Quote Post
-=VG=-
сообщение 29/10/2009, 17:16
Сообщение #12


Мастер
Иконка группы

Группа: Участник
Сообщений: 1 431
Регистрация: 09/11/2004
Из: SPb
Пользователь №: 8 229



Цитата(VaniaVania @ 29/10/2009, 13:17) *
Я использую MAX SDK 2010, для него вообще нужна студия 2009...


Смотря для каких задач скорее. Я пока 2009 студию не пользую. Глючит она непомерно. А для модификаторов 2008 хватает

Цитата(VaniaVania @ 29/10/2009, 13:17) *
... - вопрос про то, что если добавить объекты в сцену непосредственно перед рендерингом, то они в сцене появятся, но не отрендерятся.

А в классе Interface нет ничего интересного для апдайта перед рендером? Там много всего вкусного
Go to the top of the page
 
+Quote Post
MadlasS
сообщение 30/10/2009, 11:05
Сообщение #13


Знаток
Иконка группы

Группа: Пользователи
Сообщений: 259
Регистрация: 25/11/2005
Пользователь №: 18 441



VG а у тебя SDK 2010? визард работает?
У меня 2009 SDK и студия 2008, с визардом вроде сделал всё как в инструкции написано, создаю новый проект, выбираю 3дмах апликейшн и ничего не происходит подскажите чё не так может быть?

Сообщение отредактировал MadlasS - 30/10/2009, 11:28
Go to the top of the page
 
+Quote Post
MadlasS
сообщение 30/10/2009, 12:07
Сообщение #14


Знаток
Иконка группы

Группа: Пользователи
Сообщений: 259
Регистрация: 25/11/2005
Пользователь №: 18 441



VaniaVania а можно-ли вобще так сделать, я пробовал менять параметры объекта NOTIFY_RENDER_PREEVAL правдо на скрипте, макс вообще вылетает.Код скрипта:

txt = "for o in geometry do(\n"
txt +="if classof o.baseObject == Sphere then \n"
txt +="o.baseObject.segments *= 2.0\n"
txt +=")\n"

callbacks.addscript #preRendereval txt id:#sphere_segs

причём по одному кадру всё работает, а если 2 подряд 0-1 на втором вылетает.
вот я и думаю, может макс все объекты при рендери грузит только один раз при старте.

VaniaVania может так: сделать цикл, отрендерить по одному кадру а потом объедени последовательность.но наверно тебе эо не подайдёт.
Go to the top of the page
 
+Quote Post
VaniaVania
сообщение 30/10/2009, 13:04
Сообщение #15


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 10/09/2009
Пользователь №: 72 690



MadlasS, насчёт визарда ничего не подскажу, никогда ими не пользовался.

Скрипты тоже не знаю, поэтому пример скрипта никак для меня не проясняет картину...

Теперь о бродкастах - для рендеренга ведь есть 3 бродкаста (которые перед рендерингом):

NOTIFY_PRE_RENDER - вызывается перед началом всего рендеринга, со сценой можно делать что угодно.

NOTIFY_RENDER_PREEVAL - вызывается перед построением сцены для рендеринга конкретного кадра. Матрицы трансформов апплаятся, но созданные объекты или взведение флага "SetRenderable" нет.

NOTIFY_PRE_RENDERFRAME - сцену никак нельзя менять, ибо она вся уже загружена.

По моей логике, как раз NOTIFY_RENDER_PREEVAL должен быть для того, чтобы для конкретного кадра менять сцену.

Моя задача такая - плагин рассаживает объекты, в сцену они добавляются только при рендеринге, а потом удаляются. Для экономии памяти хочу, чтобы для рендеринга загружались только те объекты, которые попадают в камеру, а остальных вообще не было в сцене. Если сцена анимированная, то такое добавление/удаление нужно делать перед рендерингом каждого кадра.
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






4 страниц V   1 2 3 > » 
Fast ReplyReply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28/03/2024 - 16:13