• Добро пожаловать на Quest3D - Русскоязычное сообщество.
 

Новости:

Форум Quest3D восстановлен!

Главное меню

автоматизация подключения объектов

Автор IYV, 22 сентября 2009, 02:14:11

« назад - далее »

IYV

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

DimiS

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

Ruslan

#2
Можно взять готовое решение "лоадера" , осталось сделать из него менеджер ресурсов:
http://quest.ovos.at/browse/detail/22

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

Quest3D 4.3 RC3

barmadjar

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


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

barmadjar

Ruslan
Там походу какой-то косяк с массивом - в него ничего не заносится. Ввел новый (_NEW). Туда все заносится. Правда, почему-то без названия канала, а только тип его.
Кстати, через буффер тоже можно, там LoadBufferToChannel надо делать в пустой канал 3D object data.

Ruslan

barmadjar
Спасибо за помощь, только у меня не рендерятся объекты, не пойму в чем дело.  :'(

DimiS

да там действительно косяк с первым полем
сделал два варианта как можно всё это подгрузить

Ruslan


barmadjar

#8
A у меня с 3d Object data не получилось рендерить, зато с Surface получилось - рендерится все

Ruslan

#9
еще возник вопросик:
а можно ли с помощью какого ни будь канала, аккумулировать все 3d Object data из массива в один меш, что бы вызвать его на рендер за один DIP ?
или для этого придется писать свой канал с помощью SDK ?

DimiS

у ченела Command есть команда Collapse, вот она то по идее и делает то что тебе нужно. Но как она работает я совершенно не в курсе, сам ею никогда не пользовался и не видел как её применяют.

Ruslan


Ruslan

Вот эта команда:
Add object data (dest objectdata, source objectdata)
DimiS Еще раз, огромное тебе спасибо!

IYV

Спасибо всем за советы,но пока они для меня не выполнимы.Понял,что без ОО тут не обойдешся и начал проходить туторы из хелпа.Вроде что то проясняется по тихоньку.Наверно мне нужно будет замену 3d objectdata реализовывать с помощью импортера ОО коллада(скрин),во всяком случае  все 3d objectdata появились,а как с ними оперировать дальше нужно будет разбираться.

DimiS

Цитата: Ruslan от 23 сентября 2009, 13:44:51
Вот эта команда:
Add object data (dest objectdata, source objectdata)
DimiS Еще раз, огромное тебе спасибо!

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

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