Я прочитал что For Loop в сочетании с массивом мощная вещь но не смог пример реализовать. Модель импортирована из 3ds max 9
через MilkShape 3D 1.8.2 в .X формате.
Мне нужно не только размножить объект, но и чтобы можно было передвигать каждую копию как самостоятельную. Такое возможно?
Ты сначала изучи простые примеры и пойми принцип работы с массивами!
Вот здесь все что нужно, для начала https://guest3d.wohlnet.ru/g3d/?q=node/37 (https://guest3d.wohlnet.ru/g3d/?q=node/37)
ЦитироватьМне нужно не только размножить объект, но и чтобы можно было передвигать каждую копию как самостоятельную. Такое возможно?
Можно, можно! Но с оговоркой на то, что ты хочешь сделать и для чего, а то метод может быть не оправданным!
В своей игре планировал разместить сундуки. Вот и спрашиваю про то какими методами можно это сделать.
Цитата: kyard от 20 июля 2009, 17:32:42
Я прочитал что For Loop в сочетании с массивом мощная вещь но не смог пример реализовать.
Ну а что именно ты там не смог реализовать? в чём оказалась проблема?
Проблема в том, что пример для стандартных объектов Q3D, а у меня экспортированный в .X формате и там другие блоки. Это во-первых, а во-вторых размножить объекты я смог, но как каждую копию перемещать отдельно от остальных!?
*Конкретно: 4 объекта, перемещаются как одно целое! Как их разделить?*
Цитата: kyard от 21 июля 2009, 13:03:23
Проблема в том, что пример для стандартных объектов Q3D, а у меня экспортированный в .X формате и там другие блоки.
Это ровным счётом ни на что не влияет. Разная у вас геометрия объекта, а тебе должен быть интересен блок с Motion матрицей. Вот именно его надо воспроизвести из примера.
Цитата: kyard от 21 июля 2009, 13:03:23
Это во-первых, а во-вторых размножить объекты я смог, но как каждую копию перемещать отдельно от остальных!?
*Конкретно: 4 объекта, перемещаются как одно целое! Как их разделить?*
Ну раз они перемещаются все вместе, значит и координаты ты им одновременно меняеш, логично? Значит у тебя в цикле для отрисовки объекта должно присутствовать смещение для каждого конкретного объекта. И при каждом проходе цикла, для каждого объекта должно браться именно его смещение, например выбираться из масива по номеру прохода.
DimiS спасибо тебе что объяснил. В общих чертах я тебя понял (просто я еще не углублялся в массивы). Вот еще два вопроса:
1.Можно будет перемещать объекты в окне анимации (я имею виду копии)?
2.Если тупо копировать папки и цеплять их к рендеру(что я и делаю)как это повлияет на систему?
Цитата: kyard от 22 июля 2009, 08:41:28
1.Можно будет перемещать объекты в окне анимации (я имею виду копии)?
Я честно говоря не очень дружу с квестовым редактором по части окна анимации. Там есть какие то странные условия, при которых можно перемещать объекты из окна анимации -- к объекту должна быть подключена именно Motion матрица, к ней векторы, к котрым обязательно Envelope на каждую координату. Это из моих наблюдений, может я чего не уловил.
Вобщем когда мне надо было разместить несколько одинаковых объектов, то я просто двигал один экземпляр такого объекта подключив к нему всю ту муть. Разместив экземпляр как мне надо было для одного из объектов, я сохранял значения позишен и ротейшен векторов в массив. Потом я передвигал экземпляр в позицию для следующего объекта, и сохранял позишен и ротейшен с новым индексом, и т.д. А в цикле отрисовки уже обращялся к этим данным по индексу.
Цитата: kyard от 22 июля 2009, 08:41:28
2.Если тупо копировать папки и цеплять их к рендеру(что я и делаю)как это повлияет на систему?
Вопроса не понял, какие папки? Если ты имееш ввиду копирование одного и того же объекта несколько раз, то это черевато двумя последствиями. Во первых увеличится вес твоей проги, но это решаемо -- во всех местах где используется одна и та же Object Data разместить ссылки на один ченнел. Вторая проблема -- если у тебя применяется какая то логика к этим объектам, то когда тебе понадобится её изменить ты должен будеш внести одинаковые исправления во всех N копиях. Это может выглядеть пока пустячной проблемой, но потом ты поймёш :)
Цитата: DimiS от 22 июля 2009, 11:39:22
Цитата: kyard от 22 июля 2009, 08:41:28
1.Можно будет перемещать объекты в окне анимации (я имею виду копии)?
Я честно говоря не очень дружу с квестовым редактором по части окна анимации. Там есть какие то странные условия, при которых можно перемещать объекты из окна анимации -- к объекту должна быть подключена именно Motion матрица, к ней векторы, к котрым обязательно Envelope на каждую координату. Это из моих наблюдений, может я чего не уловил.
Вобщем когда мне надо было разместить несколько одинаковых объектов, то я просто двигал один экземпляр такого объекта подключив к нему всю ту муть. Разместив экземпляр как мне надо было для одного из объектов, я сохранял значения позишен и ротейшен векторов в массив. Потом я передвигал экземпляр в позицию для следующего объекта, и сохранял позишен и ротейшен с новым индексом, и т.д. А в цикле отрисовки уже обращялся к этим данным по индексу.
Цитата: kyard от 22 июля 2009, 08:41:28
2.Если тупо копировать папки и цеплять их к рендеру(что я и делаю)как это повлияет на систему?
Вопроса не понял, какие папки? Если ты имееш ввиду копирование одного и того же объекта несколько раз, то это черевато двумя последствиями. Во первых увеличится вес твоей проги, но это решаемо -- во всех местах где используется одна и та же Object Data разместить ссылки на один ченнел. Вторая проблема -- если у тебя применяется какая то логика к этим объектам, то когда тебе понадобится её изменить ты должен будеш внести одинаковые исправления во всех N копиях. Это может выглядеть пока пустячной проблемой, но потом ты поймёш :)
Спасибо, я это учту
Мне вот какой момент интересен: если в проекте будет ну просто не преличное кол-во блоков это сильно повлияеет на производительность ? если да то в процентах можете указать, примерно конешно.
Похоже ни кто не знает ответ на этот вопрос
В процентах от чего? От веса винчестера на котором храниться проект? )))
Каждый ченел это скомпилрованная функция, чем больше ченелов тем больше вызовов функции, чем больше вызовов функции тем больше нагрузка на проц и память. Как именно и какое количество ченелов повлияет на производительность зависит от самих ченелов и от компа.
Всем привет!!!
у меня возник такой вопрос на эту тему
Я хочу зделать простенькую игру, с звездолетам в космасе, что та вроде дендивскай галактики, и застрял на выстрелах.
Хател зделать так, для пули взять кубик привязать к ниму ForLoop, к ForLoop кнопку чтобы кагда нажимаем пуля копировалась перед звездалетам, Motion кубика задать движение вперед. насловах вроди все проста, а зделать нипалучается. :-\
Памагитнте плиззз, жилательно примером. ;)
Вот сдесь я выкладывал пример с ии и там стрельба заодно есть https://guest3d.wohlnet.ru/forum/index.php?topic=764.0 , на мой взгляд если делать каждую пулю отдельным обьектом то потом будет проще коллизию проверять
Спасибо!!! супер, почти идеально ;D
Всем рекомендую ;) ;) ;) ;) ;) ;)
А нет ли друго способа клонировать объекты помимо ForLoop?
ОО тебе в помощь. По мне - так проще, чем через массивы и For Loop. Да и возможностей поболее...
P.S. Что-то мне подсказывает, что for loop никоим оборазом не клонирует объекты, а всего лишь позволяет организовать цикл для последовательного перебора строк в массиве.
Цитировать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.
Допустим мне нужно визуально размножить объект, предположим это система частиц "Огонь", так вот как избавиться от того, что в каждой визуальной копии создаются еще копии, равные количеству интеграций ForLoop?
1) начало цикла от 0 до 10
2) сетим новую матрицу
3) визуализируем объект
4) итераций меньше 10 ? если меньше, то переходим на начало цикла (1)
а вообще, для визуализации частиц лучше использовать стандартные квестовые частицы, (если визуализировать частицы объектами, будут тормоза из за множества DIP)
Цитата: Dreamkiller от 04 мая 2011, 11:16:22
как избавиться от того, что в каждой визуальной копии создаются еще копии, равные количеству интеграций ForLoop?
C чего ты это заключил?
Цитата: Ruslan от 04 мая 2011, 15:41:58
1) начало цикла от 0 до 10
2) сетим новую матрицу
3) визуализируем объект
4) итераций меньше 10 ? если меньше, то переходим на начало цикла (1)
а вообще, для визуализации частиц лучше использовать стандартные квестовые частицы, (если визуализировать частицы объектами, будут тормоза из за множества DIP)
Ruslan - посмотрите вот на это, наглядный пример все объяснит. Обратите внимение как меняется частота колебаний огня при смене интеграций.
с частицами так нельзя ))
если их вызывать в цикле несколько раз, то частицы будут пересчитываться столько же раз за один кадр.
В данном случае действительно поможет Оо, что бы динамично создавать эмитеры (сам Оо не пользуюсь за ненадобностью, так как на данный момент знаю как создавать свои каналы, поэтому подсказать по Оо не смогу)
или другой вариант - это вручную создавать необходимое максимальное количество эмитеров, а в процессе выполнения лишние отключать путем подачи в соответствующий чилдрен значение ноль.
Спасибо Ruslan, теперь хотя бы знаю что это не вариант для частиц, а вот с ОО запара какая то, на сайте конткретного описания нет, в англоязычном руководстве не разбирусь, энглишь не тяну. Поэтому тупо сделаю много частиц.
Достаточно хорошее введение в ОО есть во встроенном хелпе. Подробно, пошагово...