1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Maya", создана пользователем the_lemon, 19 дек 2009.

Модераторы: Dark™, Skif
  1. the_lemon

    the_lemon Пользователь сайта

    С нами с:
    28.01.2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Всем доброго времени суток. Возникла проблема.

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

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

    Заранее спасибо
     
  2. dreamer3d

    dreamer3d Активный участник

    С нами с:
    07.08.2007
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    5
    Вероятно, если использовать 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
     
  3. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    dreamer3d, приятно видеть такие ответы =)
     
  4. the_lemon

    the_lemon Пользователь сайта

    С нами с:
    28.01.2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    dreamer3d, спасибо за отзыв)

    Буду разбиратся
     
  5. Тридэшник

    Тридэшник Активный участник

    С нами с:
    11.10.2008
    Сообщения:
    138
    Симпатии:
    0
    Баллы:
    11
    dreamer3d А можно попросить сцену перезалить, тож хочу этот способ попробовать, а без сцены чет не могу разобраться...
    Мая ругается, что типа нужно dynExpression, а с ним как-то не приходилось практиковаться. Спасибо.
     
Модераторы: Dark™, Skif

Поделиться этой страницей