Render.ru

Помогите с динамикой

the_lemon

Пользователь сайта
Рейтинг
2
#1
Всем доброго времени суток. Возникла проблема.

Еть два геометрических обьекта, есть емитер и система частиц. Частицы сталкиваются с обоими геометрическимии обьектами (Particles => Make Collide). Далее создаю событие (с помощью Particles=>Particle Collision Event Editor) что бы например при столкновении каждая частица создавала другую частицу, принадлежащую новой системе частиц, а сама умирала. Проблема в том что это событие (создание новой частицы) происходит при столкновении с любым из геометрических обьектов, а мне надо что бы это происходило при столкновении с одним геометрическим обьектом и не происходило при столкновении с другим обьектом.

Может кто нить что нить подскажет?

Заранее спасибо
 

dreamer3d

Активный участник
Рейтинг
5
#2
Вероятно, если использовать Particle Collision Event Editor, то подобнуб задачу нужно решать с помощью Event procedure. Но я бы предложил другой путь: воспользоваться експрешеном. Во-первых, создать пустую партиклШейпу (particleShape2) командой particle. Добавить к родительской партикл шейпе (particleShape1) ПП атрибут collisionGeometryIndex (в закладке Particles окна Add Attribute) и опросить его на предмет столкновения с конкретным объектом, Index объекта можно узнать в Гиперграфе наведя курсор на стрелочки от нужного geoConnectora к нужной particleShape. И если collisionGeometryIndeх партикла совпадает с индексои нужного объекта, то проэмитить в этой точке новый(е) партиклы, а старый прибить, спросиd у него предварительно его позицию (particleShape1.worldPosition) и скорость после отскока (particleShape1.velosity). Ещё можно ввести несколько переменных для управлиния количеством новых партиклов, их разбросом, и наследованием скорости родителя, в зависимости от конкретной задачи.

Аттрибуты numParticles, spread и inheritSpeed я добавил на трансформ родительских партиклов.
Экпрешен приблизительно такого вида:

Код:
float $posPP[], $velPP[];
$num = particle1.numParticles;
$inh = particle1.inheritSpeed;
if (particleShape1.collisionGeometryIndex == 0){
	$posPP = particleShape1.worldPosition;
	$velPP = particleShape1.velocity;
	particleShape1.lifespanPP = 0;
	$i = 0;
	while ($i < $num){
		float $spr[] = sphrand(particle1.spread);
		emit -object particle2 -position $posPP[0] $posPP[1] $posPP[2] -at velocity -vv ($velPP[0]*$inh + $spr[0]) ($velPP[1]*$inh + $spr[1]) ($velPP[2]*$inh + $spr[2]);
		$i++;
	}
}
Надеюсь, будет полезно. Если кто-то предложит другой вариант решения - было бы интересно.
Сцена
http://depositfiles.com/files/m9atr7i9r
 

Тридэшник

Активный участник
Рейтинг
11
#5
dreamer3d А можно попросить сцену перезалить, тож хочу этот способ попробовать, а без сцены чет не могу разобраться...
Мая ругается, что типа нужно dynExpression, а с ним как-то не приходилось практиковаться. Спасибо.
 
Сверху