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

Новости:

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

Главное меню

Клонирование объектов

Автор kyard, 20 июля 2009, 17:32:42

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

Dreamkiller

А нет ли друго способа клонировать объекты помимо ForLoop?

Corpic

ОО тебе в помощь. По мне - так проще, чем через массивы и For Loop. Да и возможностей поболее...

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

Sqwer

Цитировать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.

Dreamkiller

Допустим мне нужно визуально размножить объект, предположим это система частиц "Огонь", так вот как избавиться от того, что в каждой визуальной копии создаются еще копии, равные количеству интеграций ForLoop?

Ruslan

1) начало цикла от 0 до 10
2) сетим новую матрицу
3) визуализируем объект
4) итераций меньше 10 ? если меньше, то переходим на начало цикла (1)

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

Alteste

Цитата: Dreamkiller от 04 мая 2011, 11:16:22
как избавиться от того, что в каждой визуальной копии создаются еще копии, равные количеству интеграций ForLoop?
C чего ты это заключил?

Dreamkiller

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

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

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

Ruslan

с частицами так нельзя ))
если их вызывать в цикле несколько раз, то частицы будут пересчитываться столько же раз за один кадр.
В данном случае действительно поможет Оо, что бы динамично создавать эмитеры (сам Оо не пользуюсь за ненадобностью, так как на данный момент знаю как создавать свои каналы, поэтому подсказать по Оо не смогу)
или другой вариант - это вручную создавать необходимое максимальное количество эмитеров, а в процессе выполнения лишние отключать путем подачи в соответствующий чилдрен значение ноль.

Dreamkiller

Спасибо Ruslan, теперь хотя бы знаю что это не вариант для частиц, а вот с ОО запара какая то, на сайте конткретного описания нет, в англоязычном руководстве не разбирусь, энглишь не тяну. Поэтому тупо сделаю много частиц.

Corpic

Достаточно хорошее введение в  ОО есть во встроенном хелпе. Подробно, пошагово...