Quest3D - Русскоязычное сообщество

Quest3D => Логика => Тема начата: IYV от 22 Сентября 2009, 01:14:11



Название: автоматизация подключения объектов
Отправлено: IYV от 22 Сентября 2009, 01:14:11
ну у CollisionObject в окошке свойств есть флажочек Check if object child update, или я не понял твою ситуацию
Не правильно я ситуацию объяснил,вот скриншот прикрепил,так понятнее будет.В общем есть объект с множеством сюрфейсов и разными(уникальными)3D ObjectData ,объект отзеркален в forloop,на каждый 3D ObjectData нужна коллизия для CollisionRayCheck,что бы можно было изменять шейдерные переменные и менять текстуры у сюрфейсов. Коллизия срабатывает только тогда,когда цепляешь 3D ObjectData к новому сюрфейсу и объекту.Так вот задача состоит в том,что нужно быстро менять 3D ObjectData на другие без утомительной рутинной работы,так как сюрфейсов у объекта должно быть около ста.В 3ds max есть maxscript,рутинные задачи можно выполнять с помощью него,а как это сделать в квесте?   Lua script   не подойдет же? Возможно нужен какой то специально написанный для этой задачи загрузчик? В общем понятия не имею,как это можно сделать?


Название: Re: автоматизация подключения объектов
Отправлено: DimiS от 22 Сентября 2009, 02:40:00
Я так понимаю тебе нужно вынести повторяющийся код в одну функцию.
Для этого обычно разрабатывается некая структура данных, в которой будет содержаться всё то что может различаться у твоих объектов. В твоем случае это похоже набор из трёх вертекс дат и шейдер(или шейдер у тебя для всех случаев один и тот же?). Далее тебе понадобится способ хранения и перебора по этим структурам. Можно использовать арреи или ОО.
Потом тебе нужно будет переделать проверку на коллизию с мышкой, она должна делаться в цикле с каждой структурой из твоего массива. Точно так же и вызов шейдера. Теперь выполняя циклы с проверкой наведения мышки или с запуском шейдеров тебе не важно сколько структур в массиве. Останется только написать функцию для добавления новой структуры в массив, или, если совсем по модному, даже с подгрузкой всего этого из неких внешних источников.
Всё возможно.


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 22 Сентября 2009, 07:55:58
Можно взять готовое решение "лоадера" , осталось сделать из него менеджер ресурсов:
http://quest.ovos.at/browse/detail/22

p.s. У меня получилось только подгрузить cgr в которой хранится 3D ObjectData. А вот запихнуть эту 3D ObjectData в массив, у меня не получилось, как только я не пробовал и через Channel Buffer.
Если знаете как, подскажите пожалуйста.

Quest3D 4.3 RC3


Название: Re: автоматизация подключения объектов
Отправлено: barmadjar от 22 Сентября 2009, 12:44:12
p.s. У меня получилось только подгрузить cgr в которой хранится 3D ObjectData. А вот запихнуть эту 3D ObjectData в массив, у меня не получилось, как только я не пробовал и через Channel Buffer.
Если знаете как, подскажите пожалуйста.


Я думаю тут тебе стоит поступить так. В подгружаемом файле необходимый для вызова канал нужно сделать публичным (он станет красного цвета). А в твоем основном файле тебе этот канал надо заносить в массив, правильно я понял? Если так, то в рабочем твоем файле из списка каналов вытаскиваешь канал 3d ObjectData (в данном случае), делаешь его как Public Caller (Convert to Public Call Channel в контекстном меню, он станет синего цвета) и назначаешь ему в левой половине диалогового окна Properties группу каналов, из которой нужно взять необходимый канал (в данном случае под группой каналов имеется ввиду подгружаемый cgr файл) и в правом поле выбрать нужный тебе канал.
Тут есть такой нюанс. Делать это надо в состоянии когда необходимый cgr файл подгружен. Тогда остается только выбрать из списков. Иначе все вручную придется вводить, а это запарнее.
Ну и соответственно надо подсоединить этот Public Caller туда, куда нужно.
Если что-то не понятно, спрашивай.


Название: Re: автоматизация подключения объектов
Отправлено: barmadjar от 22 Сентября 2009, 14:40:06
Ruslan
Там походу какой-то косяк с массивом - в него ничего не заносится. Ввел новый (_NEW). Туда все заносится. Правда, почему-то без названия канала, а только тип его.
Кстати, через буффер тоже можно, там LoadBufferToChannel надо делать в пустой канал 3D object data.


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 22 Сентября 2009, 14:57:27
barmadjar
Спасибо за помощь, только у меня не рендерятся объекты, не пойму в чем дело.  :'(


Название: Re: автоматизация подключения объектов
Отправлено: DimiS от 22 Сентября 2009, 15:05:56
да там действительно косяк с первым полем
сделал два варианта как можно всё это подгрузить


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 22 Сентября 2009, 15:09:29
Спасибо Вам огромное!!!
 :)


Название: Re: автоматизация подключения объектов
Отправлено: barmadjar от 22 Сентября 2009, 15:28:23
A у меня с 3d Object data не получилось рендерить, зато с Surface получилось - рендерится все


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 22 Сентября 2009, 16:28:23
еще возник вопросик:
а можно ли с помощью какого ни будь канала, аккумулировать все 3d Object data из массива в один меш, что бы вызвать его на рендер за один DIP ?
или для этого придется писать свой канал с помощью SDK ?


Название: Re: автоматизация подключения объектов
Отправлено: DimiS от 23 Сентября 2009, 12:14:10
у ченела Command есть команда Collapse, вот она то по идее и делает то что тебе нужно. Но как она работает я совершенно не в курсе, сам ею никогда не пользовался и не видел как её применяют.


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 23 Сентября 2009, 12:15:45
DimiS
Спасибо! буду разбираться.


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 23 Сентября 2009, 12:44:51
Вот эта команда:
Add object data (dest objectdata, source objectdata)
DimiS Еще раз, огромное тебе спасибо!


Название: Re: автоматизация подключения объектов
Отправлено: IYV от 23 Сентября 2009, 13:40:49
Спасибо всем за советы,но пока они для меня не выполнимы.Понял,что без ОО тут не обойдешся и начал проходить туторы из хелпа.Вроде что то проясняется по тихоньку.Наверно мне нужно будет замену 3d objectdata реализовывать с помощью импортера ОО коллада(скрин),во всяком случае  все 3d objectdata появились,а как с ними оперировать дальше нужно будет разбираться.


Название: Re: автоматизация подключения объектов
Отправлено: DimiS от 23 Сентября 2009, 13:53:21
Вот эта команда:
Add object data (dest objectdata, source objectdata)
DimiS Еще раз, огромное тебе спасибо!

да лан, я даже наводку не правильную дал видимо :D
у меня в 4.2.2 кстати нету такой команды

IYV, это ты правильно решил. Тем более что в 4.3 обещают что-то изменить с коллада импортом и сделать более юзабельным. Я в своём двиге тоже скорее всего перейду на использование ОО коллады после этого.


Название: Re: автоматизация подключения объектов
Отправлено: Viik от 26 Сентября 2009, 02:29:22
Цитировать
Не правильно я ситуацию объяснил,вот скриншот прикрепил,так понятнее будет.В общем есть объект с множеством сюрфейсов и разными(уникальными)3D ObjectData ,объект отзеркален в forloop,на каждый 3D ObjectData нужна коллизия для CollisionRayCheck,что бы можно было изменять шейдерные переменные и менять текстуры у сюрфейсов. Коллизия срабатывает только тогда,когда цепляешь 3D ObjectData к новому сюрфейсу и объекту.Так вот задача состоит в том,что нужно быстро менять 3D ObjectData на другие без утомительной рутинной работы,так как сюрфейсов у объекта должно быть около ста.В 3ds max есть maxscript,рутинные задачи можно выполнять с помощью него,а как это сделать в квесте?   Lua script   не подойдет же? Возможно нужен какой то специально написанный для этой задачи загрузчик? В общем понятия не имею,как это можно сделать?
Можно в максе подетачить все по материаламв отдельные объекты, потом импортнуть колладой как Separate Objects, будет у тебя куча 3д объектов и у каждого только один сурфейс. Колижен можно прицепить руками либо сделать ОО клас исключительно для колиженов и "заполнить" его через фор луп, но я не уверен что колижен автоматически посчитаеться.
Может в твоем случае тебе и не нужен колижен с оригинальной геометрией а можно просто заменить примитивами и логикой.


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 28 Сентября 2009, 10:15:54
Рано я обрадовался, насчет команды Add object data.
Эта команда нормально работает, она действительно объединяет меши, но вот как задавать матрицу при объединении для этих объектов?

Без возможности, указывать матрицу сливаемым объектам, эта команда попросту бесполезная.


Название: Re: автоматизация подключения объектов
Отправлено: DimiS от 30 Сентября 2009, 17:44:46
надо юзать всё таки Collapse  ;)
из хелпы:
This command collapses a scene into one 3dobjectData, very usefull for instance for creating an collision model dynamically from say naturepaint data.
Children

1. 3D Render - Items to collapse
2. 3D ObjectData - 3D ObjectData to collapse to

в ченеле Command New Interface она находиться в разделе Nature Painting


Название: Re: автоматизация подключения объектов
Отправлено: Ruslan от 30 Сентября 2009, 17:58:08
Ура работает! DimiS спасибо!  :)
Тут же пригодится команда Clear object data  ;)