Поэтому мы рассмотрим наиболее общий метод - без создания дополнительных объектов.
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), подобного контроля над цветом возникающих частиц добиться было бы гораздо труднее.