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

Quest3D => Логика => Тема начата: kyard от 20 Июля 2009, 16:32:42



Название: Клонирование объектов
Отправлено: kyard от 20 Июля 2009, 16:32:42
Я прочитал что For Loop в сочетании с массивом мощная вещь но не смог пример реализовать. Модель импортирована из 3ds max 9
через MilkShape 3D 1.8.2 в .X формате.
Мне нужно не только размножить объект, но и чтобы можно было  передвигать каждую копию как самостоятельную. Такое возможно?


Название: Re: Клонирование объектов
Отправлено: mixey от 20 Июля 2009, 21:08:32
Ты сначала изучи простые примеры и пойми принцип работы с массивами!

Вот здесь все что нужно, для начала http://guest3d.wohlnet.ru/g3d/?q=node/37 (http://guest3d.wohlnet.ru/g3d/?q=node/37)

Цитировать
Мне нужно не только размножить объект, но и чтобы можно было  передвигать каждую копию как самостоятельную. Такое возможно?

Можно, можно! Но с оговоркой на то, что ты хочешь сделать и для чего, а то метод может быть не оправданным!


Название: Re: Клонирование объектов
Отправлено: kyard от 21 Июля 2009, 09:47:24
В своей игре планировал разместить сундуки. Вот и спрашиваю про то какими методами можно это сделать.


Название: Re: Клонирование объектов
Отправлено: DimiS от 21 Июля 2009, 11:35:28
Я прочитал что For Loop в сочетании с массивом мощная вещь но не смог пример реализовать.

Ну а что именно ты там не смог реализовать? в чём оказалась проблема?


Название: Re: Клонирование объектов
Отправлено: kyard от 21 Июля 2009, 12:03:23
Проблема в том, что пример для стандартных объектов Q3D, а у меня экспортированный в .X формате и там другие блоки. Это во-первых, а во-вторых размножить объекты я смог, но как каждую копию перемещать отдельно от остальных!?

*Конкретно: 4 объекта, перемещаются как одно целое! Как их разделить?*


Название: Re: Клонирование объектов
Отправлено: DimiS от 21 Июля 2009, 13:51:09
Проблема в том, что пример для стандартных объектов Q3D, а у меня экспортированный в .X формате и там другие блоки.
Это ровным счётом ни на что не влияет. Разная у вас геометрия объекта, а тебе должен быть интересен блок с Motion матрицей. Вот именно его надо воспроизвести из примера.

Это во-первых, а во-вторых размножить объекты я смог, но как каждую копию перемещать отдельно от остальных!?

*Конкретно: 4 объекта, перемещаются как одно целое! Как их разделить?*
Ну раз они перемещаются все вместе, значит и координаты ты им одновременно меняеш, логично? Значит у тебя в цикле для отрисовки объекта должно присутствовать смещение для каждого конкретного объекта. И при каждом проходе цикла, для каждого объекта должно браться именно его смещение, например выбираться из масива по номеру прохода.


Название: Re: Клонирование объектов
Отправлено: kyard от 22 Июля 2009, 07:41:28
DimiS спасибо тебе что объяснил. В общих чертах я тебя понял (просто я еще не углублялся в массивы). Вот еще два вопроса:
1.Можно будет перемещать объекты  в окне анимации (я имею виду копии)?
2.Если тупо копировать папки и цеплять их к рендеру(что я и делаю)как это повлияет на систему?


Название: Re: Клонирование объектов
Отправлено: DimiS от 22 Июля 2009, 10:39:22
1.Можно будет перемещать объекты  в окне анимации (я имею виду копии)?
Я честно говоря не очень дружу с квестовым редактором по части окна анимации. Там есть какие то странные условия, при которых можно перемещать объекты из окна анимации -- к объекту должна быть подключена именно Motion матрица, к ней векторы, к котрым обязательно Envelope на каждую координату. Это из моих наблюдений, может я чего не уловил.
Вобщем когда мне надо было разместить несколько одинаковых объектов, то я просто двигал один экземпляр такого объекта подключив к нему всю ту муть. Разместив экземпляр как мне надо было для одного из объектов, я сохранял значения позишен и ротейшен векторов в массив. Потом я передвигал экземпляр в позицию для следующего объекта, и сохранял позишен и ротейшен с новым индексом, и т.д. А в цикле отрисовки уже обращялся к этим данным по индексу.

2.Если тупо копировать папки и цеплять их к рендеру(что я и делаю)как это повлияет на систему?
Вопроса не понял, какие папки? Если ты имееш ввиду копирование одного и того же объекта несколько раз, то это черевато двумя последствиями. Во первых увеличится вес твоей проги, но это решаемо -- во всех местах где используется одна и та же Object Data разместить ссылки на один ченнел. Вторая проблема -- если у тебя применяется какая то логика к этим объектам, то когда тебе понадобится её изменить ты должен будеш внести одинаковые исправления во всех N копиях. Это может выглядеть пока пустячной проблемой, но потом ты поймёш :)


Название: Re: Клонирование объектов
Отправлено: kyard от 22 Июля 2009, 14:13:11
1.Можно будет перемещать объекты  в окне анимации (я имею виду копии)?
Я честно говоря не очень дружу с квестовым редактором по части окна анимации. Там есть какие то странные условия, при которых можно перемещать объекты из окна анимации -- к объекту должна быть подключена именно Motion матрица, к ней векторы, к котрым обязательно Envelope на каждую координату. Это из моих наблюдений, может я чего не уловил.
Вобщем когда мне надо было разместить несколько одинаковых объектов, то я просто двигал один экземпляр такого объекта подключив к нему всю ту муть. Разместив экземпляр как мне надо было для одного из объектов, я сохранял значения позишен и ротейшен векторов в массив. Потом я передвигал экземпляр в позицию для следующего объекта, и сохранял позишен и ротейшен с новым индексом, и т.д. А в цикле отрисовки уже обращялся к этим данным по индексу.

2.Если тупо копировать папки и цеплять их к рендеру(что я и делаю)как это повлияет на систему?
Вопроса не понял, какие папки? Если ты имееш ввиду копирование одного и того же объекта несколько раз, то это черевато двумя последствиями. Во первых увеличится вес твоей проги, но это решаемо -- во всех местах где используется одна и та же Object Data разместить ссылки на один ченнел. Вторая проблема -- если у тебя применяется какая то логика к этим объектам, то когда тебе понадобится её изменить ты должен будеш внести одинаковые исправления во всех N копиях. Это может выглядеть пока пустячной проблемой, но потом ты поймёш :)

Спасибо, я это учту


Название: Re: Клонирование объектов
Отправлено: redis от 28 Июля 2009, 13:43:15
Мне вот какой момент интересен: если в проекте будет ну просто не преличное кол-во блоков это сильно повлияеет на производительность ? если да то в процентах можете указать, примерно конешно.


Название: Re: Клонирование объектов
Отправлено: kyard от 07 Августа 2009, 15:50:48
Похоже ни кто не знает ответ на этот вопрос


Название: Re: Клонирование объектов
Отправлено: Viik от 07 Августа 2009, 21:52:39
В процентах от чего? От веса винчестера на котором храниться проект? )))

Каждый ченел это скомпилрованная функция, чем больше ченелов тем больше вызовов функции, чем больше вызовов функции тем больше нагрузка на проц и память. Как именно и какое количество ченелов повлияет на производительность зависит от самих ченелов и от компа.


Название: Re: Клонирование объектов
Отправлено: Dr.Akula от 09 Августа 2009, 11:07:14
Всем привет!!!
у меня возник такой вопрос на эту тему
Я хочу зделать простенькую игру, с звездолетам в космасе, что та вроде дендивскай галактики, и застрял на выстрелах.
Хател зделать так, для пули взять кубик привязать к ниму ForLoop, к ForLoop кнопку чтобы кагда нажимаем пуля копировалась перед звездалетам, Motion кубика задать  движение вперед. насловах вроди все проста, а зделать нипалучается.   :-\
Памагитнте плиззз, жилательно примером. ;)


Название: Re: Клонирование объектов
Отправлено: redis от 09 Августа 2009, 16:47:57
Вот сдесь я выкладывал пример с ии и там стрельба заодно есть http://guest3d.wohlnet.ru/forum/index.php?topic=764.0 , на мой взгляд если делать каждую пулю отдельным обьектом то потом будет проще коллизию проверять


Название: Re: Клонирование объектов
Отправлено: Dr.Akula от 09 Августа 2009, 20:21:42
Спасибо!!! супер, почти идеально ;D
Всем рекомендую  ;) ;) ;) ;) ;) ;) 


Название: Re: Клонирование объектов
Отправлено: Dreamkiller от 03 Мая 2011, 13:16:02
А нет ли друго способа клонировать объекты помимо ForLoop?


Название: Re: Клонирование объектов
Отправлено: Corpic от 03 Мая 2011, 18:58:23
ОО тебе в помощь. По мне - так проще, чем через массивы и For Loop. Да и возможностей поболее...

P.S. Что-то мне подсказывает, что for loop никоим оборазом не клонирует объекты, а всего лишь позволяет организовать цикл для последовательного перебора строк в массиве.


Название: Re: Клонирование объектов
Отправлено: Sqwer от 03 Мая 2011, 20:21:06
Цитировать
P.S. Что-то мне подсказывает, что for loop никоим оборазом не клонирует объекты, а всего лишь позволяет организовать цикл для последовательного перебора строк в массиве.

он просто вызывает  виртуальный метод virtual void    CallChannel(); всех чилдренов  N ое кол-во раз , и перед каждой итерацией увеличивает значение счётчика.

псевдокод:

N - кол-во  итераций   (первый  подключаемый)
C - текущая итерация   (второй подключаемый)

for(int i=0; i<N; ++i)
{
C=i;

pObject  - указатель на подключаемый объект  (от третьего линка )

pObject->CallChannel();

}


логика работы канала по методу CallChannel();    у всех разная.

но нужно знать, что  метод CallChannel();  у  3DObjectData  вызывает его отрисовку и только!

иными словами , подключив  3DObjectData  в ФорЛуп мы рендим его столько раз , сколько указано в первом линке. Сам объект  3DObjectData у нас не копируется.  Изменяя в зависимости от текущей итерации  матрицу объекта и цвет можно визуально размножить 3DObjectData.


Название: Re: Клонирование объектов
Отправлено: Dreamkiller от 04 Мая 2011, 10:16:22
Допустим мне нужно визуально размножить объект, предположим это система частиц "Огонь", так вот как избавиться от того, что в каждой визуальной копии создаются еще копии, равные количеству интеграций ForLoop?


Название: Re: Клонирование объектов
Отправлено: Ruslan от 04 Мая 2011, 14:41:58
1) начало цикла от 0 до 10
2) сетим новую матрицу
3) визуализируем объект
4) итераций меньше 10 ? если меньше, то переходим на начало цикла (1)

а вообще, для визуализации частиц лучше использовать стандартные квестовые частицы, (если визуализировать частицы объектами, будут тормоза из за множества DIP)


Название: Re: Клонирование объектов
Отправлено: Alteste от 04 Мая 2011, 15:56:36
как избавиться от того, что в каждой визуальной копии создаются еще копии, равные количеству интеграций ForLoop?
C чего ты это заключил?


Название: Re: Клонирование объектов
Отправлено: Dreamkiller от 05 Мая 2011, 16:57:48
1) начало цикла от 0 до 10
2) сетим новую матрицу
3) визуализируем объект
4) итераций меньше 10 ? если меньше, то переходим на начало цикла (1)

а вообще, для визуализации частиц лучше использовать стандартные квестовые частицы, (если визуализировать частицы объектами, будут тормоза из за множества DIP)

Ruslan - посмотрите вот на это, наглядный пример все объяснит. Обратите внимение как меняется частота колебаний огня при смене интеграций.


Название: Re: Клонирование объектов
Отправлено: Ruslan от 05 Мая 2011, 19:29:02
с частицами так нельзя ))
если их вызывать в цикле несколько раз, то частицы будут пересчитываться столько же раз за один кадр.
В данном случае действительно поможет Оо, что бы динамично создавать эмитеры (сам Оо не пользуюсь за ненадобностью, так как на данный момент знаю как создавать свои каналы, поэтому подсказать по Оо не смогу)
или другой вариант - это вручную создавать необходимое максимальное количество эмитеров, а в процессе выполнения лишние отключать путем подачи в соответствующий чилдрен значение ноль.


Название: Re: Клонирование объектов
Отправлено: Dreamkiller от 05 Мая 2011, 22:13:59
Спасибо Ruslan, теперь хотя бы знаю что это не вариант для частиц, а вот с ОО запара какая то, на сайте конткретного описания нет, в англоязычном руководстве не разбирусь, энглишь не тяну. Поэтому тупо сделаю много частиц.


Название: Re: Клонирование объектов
Отправлено: Corpic от 05 Мая 2011, 22:45:41
Достаточно хорошее введение в  ОО есть во встроенном хелпе. Подробно, пошагово...