Войти
ПрограммированиеТерминыФизика

Физический движок (Physics Engine)

Физический движок (Physics Engine) — программа (или подпрограмма), моделирующая тот или иной физический процесс.

Рассмотрим понятие физический движок на классическом примере движка, моделирующего физику твердых тел на основе импульсов (впрочем, большая часть сказанного относится и к другим методам). Фактически, все, что требуется от такого движка — уметь выполнять запросы вида «добавить тело», «симулировать шаг времени», «взять позицию/ориентацию данного тела» и другие. Рассмотрим подробнее основную его функцию «симулировать шаг времени», выполняемую каждый кадр в реалтайм приложении, например, в игре. В каждом кадре мы прежде всего обязательно должны найти все потенциально взаимодействующие пары тел. Этот шаг называется Broadphase. Чтобы сузить количество пар для проверок, применяются алгоритмы:

Далее, найдя пары потенциально пересекающихся тел, вступает в силу Narrowphase — стадия, на которой движок должен находить точные данные о контакте тел — находить точки контакта, нормали и глубины проникновения. Основные алгоритмы указаны по ссылке.

Следующая стадия — разрешение найденных контактов и других типов связей, которым занимается Solver

Завершающая стадия — интегрирование позиции. То есть, собственно, смещение всех тел сцены. Стадия не очень сложная, выбор алгоритмов её реализации невелик, но зато они отлично работают — интеграторы по Эйлеру, Ньютону и Рунге-Кутта.

Также сквозь все стадии «просачиваются» такие функции, как коллбэки (callbacks) на события, например, вызов некоторой функции, при каждом касания чайника со столом. И фризинг (freezing) или, как его ещё называют, sleeping тел — алгоритмы, «выкидывающие» из просчета слишком долго находящиеся в покое или, например, невидимые игроку тела.

Что такое Физический движок (Physics Engine)?

#движок

9 февраля 2008 (Обновление: 9 окт. 2012)

Комментарии [1]