Физические пазлы (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.

Параметры:

angular damping
Коэффициент сопротивления, замедляющий вращающийся объект: 0 - демпфирование отсутствует, 1 - максимальное демпфирование. Входные значения ограничены диапазоном [0, 1].
angular factor
Установить степень свободного вращения для указанного тела. Например, установив компонент Z равным нулю, можно запретить вращение тела вокруг оси вверх-вниз (Блендер, Max) или вперед-назад (Майя).
angular velocity
Установить вектор скорости вращения.
ccd motion threshold
Порог движения, используемый для моделирования физики непрерывного обнаружения столкновений (CCD). Укажите низкое значение, например 0.001
ccd swept sphere radius
Радиус сферы, используемой для моделирования физики непрерывного обнаружения столкновений (CCD). Это значение должно соответствовать размеру сталкивающихся объектов. Например, для моделирования маленькой пули размером 0,01 м это значение можно смело установить равным 0,5.
force
Толкать тело в заданном направлении.
friction
Коэффициент сопротивления относительному движению твердых тел, скользящих друг относительно друга.
gravity
Назначить гравитацию индивидуально для определенного тела.
impulse
Действует как Linear Velocity, но также учитывает массу тела (более тяжелые объекты приобретают меньшую скорость).
linear damping
Коэффициент сопротивления, замедляющий движущийся объект: 0 - нет демпфирования (например, свободное падение), 1 - максимальное демпфирование (например, объект падает без ускорения). Входные значения ограничены диапазоном [0, 1].
linear factor
Установить степени свободного перемещения для указанного тела. Например, установив компонент Z равным нулю, можно отключить движение тела вверх-вниз (Блендер, Max) или вперед-назад (Майя).
linear velocity
Установить вектор скорости движения.
margin
Надбавка к размеру, используемся для улучшения стабильности и производительности расчётов соударений. Должна указываться для соударяемых поверхностей форм mesh и cone. Для остальных поверхностей (box, sphere, capsule, cylinder) это значение физический движок рассчитывает автоматически.
position
Установить положение тела (работает как пазл snap body).
restitution
Коэффициент упругости: 0 - тело не упругое, как глина, 1 - тело ведет себя как сделанное из резины.
rotation
Устанавливает поворот тела (эйлеровские углы XYZ, работает как пазл snap body).
stiffness
Жесткость мягких тел, таких как объемы и канаты. Устарел, вместо него следует использовать пазл apply soft body param.
torque
Задаёт вращение тела в заданном направлении.
torque impulse
Действует как Angular Velocity, но учитывает массу тела (более тяжелые объекты приобретают меньшую скорость вращения).

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

get body param

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

Параметры:

angular damping
Коэффициент сопротивления, замедляющий вращающийся объект: 0 - демпфирование отсутствует, 1 - максимальное демпфирование.
angular factor
Степени свободного вращения для указанного тела (XYZ).
angular velocity
Вектор скорости вращения.
ccd motion threshold
Порог движения, используемый для моделирования физики непрерывного обнаружения столкновений (CCD).
ccd swept sphere radius
Радиус сферы, используемой для моделирования физики непрерывного обнаружения столкновений (CCD).
force
Вектор силы, приложенной к телу.
friction
Коэффициент сопротивления относительному движению твердых тел, скользящих друг относительно друга.
gravity
Вектор силы тяжести, приложенный к телу.
linear damping
Коэффициент сопротивления, замедляющий движущийся объект: 0 - отсутствие демпфирования (например, свободное падение), 1 - максимальное демпфирование (например, объект падает без ускорения).
linear factor
Степени свободного перемещения для указанного тела (XYZ).
linear velocity
Вектор скорости движения.
margin
Надбавка к размеру, используемся для улучшения стабильности и производительности расчётов соударений.
position
Положение тела XYZ.
restitution
Коэффициент упругости: 0 - тело не упругое, как глина, 1 - тело ведет себя как сделанное из резины.
stiffness
Жесткость мягких тел, например канатов и тел имеющих объем. Устарел, вместо него следует использовать пазл get soft body param.
torque
Вектор крутящего момента, приложенного к телу.

set body state

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

Параметры:

on simulation tick

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

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

snap body

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

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

add constraint to

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

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

remove constraint from

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

anchor soft body

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

apply soft body param

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

Параметры:

anchor hardness
Коэффициент жёсткости якоря: 0 — нет влияния якоря, 1 — максимальное влияние якоря.
angular stiffness
Угловая жёсткость: 0 — отсутствие угловой жёсткости, 1 — максимальная угловая жёсткость.
collision flags
Флаг соударений жёсткого тела: 0 — нет соударений с другими жёсткими телами, 1 — простой расчёт соударений, 17 — точный расчёт соударений. Значение по умолчанию 17.
damping coefficient
Коэффициент замедления: 0 - отсутствие замедления, 1 - максимальное замедление.
drag coefficient
Коэффициент силы сопротивления (сопротивление жидкости). Должен быть положительным числом.
dynamic friction
Динамическое трение. 0 — без трения, 1.0 — максимальное трение.
lift coefficient
Коэффициент подъёмной силы. Должен быть положительным числом.
linear stiffness
Линейная жёсткость: 0 — отсутствие линейной жёсткости, 1 — максимальная линейная жёсткость.
position iterations
Количество итераций расчёта позиции. Бо́льшие значения улучшают качество симуляции. Должен быть положительным числом.
pressure coefficient
Коэффициент давления (например для надувных шаров).
velocity iterations
Количество итераций расчёта скорости. Бо́льшие значения улучшают качество симуляции. Должен быть положительным числом.
wind velocity
Вектор скорости ветра.

get soft body param

Gets a parameter from the soft body associated with a specified object.

Параметры:

anchor hardness
Коэффициент жёсткости якоря: 0 — нет влияния якоря, 1 — максимальное влияние якоря.
angular stiffness
Угловая жёсткость: 0 — отсутствие угловой жёсткости, 1 — максимальная угловая жёсткость.
collision flags
Флаг соударений жёсткого тела: 0 — нет соударений с другими жёсткими телами, 1 — простой расчёт соударений, 17 — точный расчёт соударений. Значение по умолчанию 17.
damping coefficient
Коэффициент замедления: 0 - отсутствие замедления, 1 - максимальное замедление.
drag coefficient
Коэффициент силы сопротивления (сопротивление жидкости).
dynamic friction
Динамическое трение. 0 — без трения, 1.0 — максимальное трение.
lift coefficient
Коэффициент подъёмной силы. Должен быть положительным числом.
linear stiffness
Линейная жёсткость: 0 — отсутствие линейной жёсткости, 1 — максимальная линейная жёсткость.
position iterations
Количество итераций расчёта позиции.
pressure coefficient
Коэффициент давления (например для надувных шаров).
velocity iterations
Количество итераций расчёта скорости.
wind velocity
Вектор скорости ветра.

detect collisions and collision info

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

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

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

Возможности предоставляемые с помощью «Ява Скрипта»

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

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

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

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

const myVector = new Ammo.btVector3(1.0, 0.0, 0.0); console.log('Мой физический вектор:', myVector.x(), myVector.y(), myVector.z());

Также вы можете получить доступ к структурам данных, которые мы используем в пазлах, с помощью аргумента puzzles функции runCode() главного .js-файла вашего приложения, либо с помощью переменной puzzles в пазле exec script.

Мир

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

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

Физические тела

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

const body = puzzles.physics.bodies['Whirligig']; console.log('Масса тела:', 1.0 / body.getInvMass());

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

Физические ограничители

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

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

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

Physics Sync List

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

// добавить объект/тело в список синхронизации // поддерживаемые типы: 'DYNAMIC', 'KINEMATIC', 'STATIC', 'GHOST' и 'SOFT_BODY' puzzles.physics.addToSyncList(obj, body, 'DYNAMIC'); // удалить объект/тело из списка синхронизации puzzles.physics.removeFromSyncList(obj, body);

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

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