Поэтому мы рассмотрим наиболее общий метод - без создания дополнительных объектов.

1.    Создаем полигональный куб с опциями “по умолчанию” (Create -> Polygon Primitives ->Cube). Переименуем его просто в cube.

PolyCube -n cube;

2.    Увеличим его размер по всем осям в 3 раза

scale -r 3 3 3 cube;

3.    «Заморозим» трансформации и удалим историю для построенного куба, выполнив команды Modify -> Freeze Transformations и Edit -> Delete by Type -> History.

makeIdentity -apply true -t 1 -r 1 -s 1 cube; delete -ch cube;

4.    Превратим наш куб в активное твердое тело (Soft/ Rigid Bodies -> Create Active Rigid Body), переименуем узел rigidBody1 в activeRigidBody и увеличим атрибут bounciness до 0.8 и dynamicFriction до 0.6

select -r cube;

rigidBody -паше activeRigidBody -active -dynamicFriction 0.5 -bounciness 0.8;

5.    Добавим в нашу сцену поле гравитации, действующее на куб. Для этого, выделив cube, выполним команду Fields -> Gravity. Уменьшим значение атрибута magnitude гравитационного поля (которое по умолчанию получило имя gravity-Field 1) до 5.

gravity -position 0 0 0 -magnitude 5; connectDynamic -f gravityField1 cube; Если сейчас проиграть сцену, то мы увидим кубик, падающий вниз под действием силы тяжести. Добавим в нашу сцену поверхность, о которую кубик мог бы ударяться. Это будет обыкновенная полигональная плоскость с атрибутами пассивного твердого тела.

6.    Создаем полигональную плоскость (Create -> Polygonal Primitives ->Plane). Переименуем ее в plane. Существенно увеличим ее размеры, отмасштабироеав по горизонтальным осям в 35 раз, и, так же как и раньше, «заморозим» трансформации и удалим историю ее создания.

polyPlane -name plane; scale -r 35 1 35;

makeIdentity -apply true -t 1 -r 1 -s 1 plane; delete -ch plane;

7.    Преобразуем плоскость в пассивное твердое тело (Soft/Rigid Bodies -> Create Passive Rigid Body), вновь появившийся узел rigidBody1 переименуем в passiveRigidBody. Добавим нашей плоскости упругости, увеличив значение атрибута PasstveRigidBody.bounciness до 0.8

select -r plane;

rigidBody -name passiveRigidBody -passive -bounciness 0.8;

8.    Теперь приподнимем куб над плоскостью и не много развернем его в пространстве, чтобы придать сцене немного живости. Значения translateY=16, rotateX=35, rotateY= -30, rotateZ=25 - неплохой выбор...................................................................................................................................................................

(Сцена emit3a.mb)

Проиграем сцену. Как и ожидалось, куб падает на плоскость, несколько раз отскакивает от нее с уменьшающейся амплитудой и, в конце концов, останавливается. На все движение понадобится около 500 кадров.

Теперь займемся содержательной частью - добавим искры, которые будут возникать в местах столкновения куба и плоскости. В роли «искр», как и в предыдущем примере, будут выступать частицы, которые мы будем порождать с помощью команды emit. Осталось только определить время и место их возникновения. Заодно потребуем, чтобы каждый удар порождал искры своего индивидуального цвета. Поскольку мы будем использовать команду emit, то реализовать такой эффект будет нетрудно, практически «даром». В случае же, если бы мы воспользовались другими методами, например, на основе вспомогательного эластичного тела (soft body), подобного контроля над цветом возникающих частиц добиться было бы гораздо труднее.


⇐ вернуться назад | | далее ⇒