Физические пазлы (Physics)

Эти пазлы используются для моделирования физического поведения объектов.

Содержание

Перечень физических пазлов

create physics world

Инициализирует физический движок, используя указанные параметры gravity и frames-per-second. Значение gravity по умолчанию 9.8 соответствует условиям на поверхности Земли. Нулевое значение означает отсутствие гравитации, как в космосе. Чем выше значение fps, тем выше качество симуляции в ущерб производительности.

Флажок soft body активирует возможность симуляции мягкого тела.

Под капотом, этот пазл также обеспечивает обнаружение столкновений и автоматическую синхронизацию с графикой.

create rigid body

Создает физическое тело из указанного объекта типа dynamic, kinematic, static или ghost. Присваивает форму столкновения и задает массу тела (действительно только для dynamic тел). Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

Физические типы тела:

Поддерживаемые формы жесткого тела:

По соображениям производительности отдавайте предпочтение примитивным физическим формам (кубам, сферам, капсулам, конусам и цилиндрам), а не детальным мешам. Кроме того, static меши имеют гораздо лучшую производительность, чем dynamic, kinematic и ghost.

create soft body

Создает мягкое тело из указанного объекта с заданной общей mass и необязательными параметрами pressure. Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

Поддерживаемые мягкие формы тела:

Не забудьте активировать симуляцию мягких тел в physics world перед созданием мягких тел.

remove physics body

Удаляет физику с указанного объекта, уничтожая связанное с ним физическое тело. Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

apply body param

Задает параметры для физического тела, связанного с указанным объектом. Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

Параметры:

Когда два тела сталкиваются, учитываются параметры трения и реституции обоих тел.

get body param

Получает параметр из физического тела, связанного с указанным объектом.

Параметры:

physics body params

Этот пазл теперь устарел. Вместо него используйте apply body param.

Задает параметры для физического тела, связанного с указанным объектом. Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

Параметры:

Когда два тела сталкиваются, учитываются параметры трения и реституции обоих тел.

apply vector

Этот пазл теперь устарел. Вместо него используйте параметр apply body.

Применяется Force, Gravity, Linear Velocity, Angular Velocity, Impulse, Torque, Torque Impulse или Position к физическому телу, связанному с указанным объектом, в указанном направлении в мировом пространстве. Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

Параметры:

set body state

Изменение состояния физического тела, связанного с указанным объектом. Также работает для списка объектов, группы (или списка групп) или с пазлом all objects.

Параметры:

on simulation tick

Запуск пазлов, указанных в слоте *do", непосредственно перед или сразу после тика симуляции физики.

Тик симуляции физики соответствует значению FPS, указанному при создании physics world, и не совпадает с кадром рендеринга. Поэтому мы рекомендуем применять силы/скорости/импульсы до тика симуляции и определять столкновения между телами после тика симуляции. Таким образом, вы сможете добиться более стабильной и реалистичной симуляции.

snap body

Перемещает физическое тело, связанное с указанным объектом, и сам объект в положение другого объекта, копируя его данные преобразования. Также копируется вращение. Не работает со списками, группами или пазлом "all objects".

Работает аналогично пазлу apply body param / position.

add constraint to

Соединяет два физических тела ограничением заданного типа.

Виды ограничений:

remove constraint from

Удалите физическое ограничение.

anchor soft body

Привязка мягкого тела к заданному жесткому телу в точке пространства, представленной заданным вектором.

detect collisions and collision info

Определяет, есть ли столкновение в данный момент указанного тела с другим телом (или любым телом из списка или группы). Если столкновение произошло, срабатывают пазлы в слоте "if touching do", иначе - в слоте "if not touching do".

Пазл "detect collisions" запускает любой из своих слотов обратного вызова каждый кадр рендеринга.

Пазл collision info выводит словарь со следующими полями:

Расширение с помощью JavaScript

Перед началом чтения, пожалуйста, ознакомьтесь с разделом Использование JavaScript данного руководства пользователя.

Для создания физических пазловмы используем библиотеку JavaScript под названием Ammo.js. Эта библиотека представляет собой популярный физический движок Bullet, скомпилированный для использования в браузере.

Чтобы познакомиться с Bullet, ознакомьтесь с руководством по Bullet Physics SDK, доступным на GitHub, а также с официальным справочником Bullet API Reference.

В Verge3D вы можете выполнять API Bullet/Ammo.js напрямую, используя пространство имен Ammo:

var myVector = new Ammo.btVector3(1.0, 0.0, 0.0); console.log('My physics vector is:', myVector.x(), myVector.y(), myVector.z());

Также вы можете получить доступ к следующим структурам данных, которые мы используем в пазлах:

World

В зависимости от инициализированного физического мира он может быть экземпляром класса btDiscreteDynamicsWorld или btSoftRigidDynamicsWorld:

var gravity = v3d.puzzles.physics.world.getGravity(); console.log('World gravity:', gravity.y());

Physics Bodies

Физические тела хранятся как данные с ключевым значением внутри объекта v3d.puzzles.physics.bodies:

var body = v3d.puzzles.physics.bodies['Whirligig']; console.log('Body mass:', 1.0 / body.getInvMass());

Жесткие тела являются экземплярами класса btRigidBody, а мягкие тела - экземплярами класса btSoftBody.

Physics Constraints

Ограничения на пули/патроны хранятся в виде ключевых значений внутри двумерного объекта v3d.puzzles.physics.constraints:

var hingeConstraint = v3d.puzzles.physics.constraints['Suzanne']['Axis']; hingeConstraint.enableAngularMotor(true, 10, 10);

Эти имена представляют первое и второе тела ограничения соответственно.

Physics Sync List

Пазлы Verge3D используют так называемый список синхронизации для перемещения объектов, представленных физическими телами, в пространстве. Список синхронизации недоступен напрямую, поэтому для добавления/удаления тел в/из этого списка необходимо использовать следующие методы API.

// add obj / body to the sync list // the type can be 'DYNAMIC', 'KINEMATIC', 'STATIC', 'GHOST', or 'SOFT_BODY' v3d.puzzles.physics.addToSyncList(obj, body, 'DYNAMIC'); // remove obj / body from the sync list v3d.puzzles.physics.removeFromSyncList(obj, body);

Проблемы с Пазлами?

Обратитесь за помощью на наш форум!