Статьи / О библиотеке физики Box2D

О библиотеке физики Box2D


Отправить ссылку:

О библиотеке физики Box2D

Введение

Статья рассказывает о библиотеке физики (физическом движке) Box 2D и основах его использования, примеры основаны на версии Box2D v2.0.1.

Физический движок - библиотека, которая предоставляет разработчику возможность симуляции физических законов реального мира в программе. Надеюсь, из определения понятно основное назначение физического движка, иными словами, если в вашей программе (чаще всего в игре) необходимо получить реальные физические взаимодействия объектов, в этом Вам поможет физический движок.

Подготовка Box2D к использованию

Box2D (http://www.box2d.org/) - бесплатный физический движок, разработанный Erin Catto и распространяемый по лицензии zlib.

Box2D v2.0.1 довольно легко подготовить к использованию в Visual Studio для этого необходимо скачать исходники. Открываем solution Box2D_v2.0.1\Box2D\Build\VC8\box2d.sln и компилируем в Debug и Release, на выходе получаем в директории Box2D_v2.0.1\Box2D\Library\ файлы box2d_d.lib и box2d.lib.

Главный header файл находится в Box2D_v2.0.1\Box2D\Include\box2d.h, но ему потребуется большое количество файлов из директории Box2D_v2.0.1\Box2D\Source.

Основные сущности Box2D

World (мир) - физический мир движка, самый главный объект включает в себя все тела.

Body (тело) - основной объект движка. Тело являться основным независимым объектом мира.

Shape (форма) - составная часть тела, которая определяет геометрию тела. Тело может быть сложным, то есть состоять из нескольких форм. Форма также обладает физическими свойствами, такими как плотность, трение.

Ground (земля) - особое тело, являющееся статичным, то есть оно ни кем не может быть передвинуто и оно не взаимодействует с другими статичными телами.

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

Joint (соединение) - соединение двух тел. В Box2D присутствуют различные типы соединения.

Первые шаги с Box 2D

Перво-наперво нам необходимо создать мир. Это сделать просто:

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

После создания мира необходимо создать землю. Как бы громко это не звучало, это довольно просто. Земля в нашем случае будет прямоугольником внизу. Что бы наше тело оказалось статичным, задаём ему нулевую массу.

Чтобы задать геометрическую форму телу необходимо добавить к нему форму, что мы и делаем:

После создания земли создадим тело, которое будет падать на землю:

Придадим ему форму:

Массу тела можно посчитать исходя из форм, которые входят в его состав, используя функцию:

После задания всех объектов необходимо провести симуляцию, это делается функцией:

timeStep - время итерации, обычно 1 / 60 секунды. Iterations - по сути, точность вычислений. Алгоритм лежащий в основе движка итерационный и этот параметр задаёт точность приближения.

После того как произошёл расчет шага, можно получить изменившиеся параметры тел:

К статье приложены примеры, первый из которых демонстрирует создание тела.

Силы

На все тела действует сила гравитации, но приложив силу можно придать телу ускорение.

Приложить силу к телу можно функцией:

В функцию необходимо передать вектор силы (значения в Ньютонах) и точку приложения силы в мировых координатах.

Так же к телу можно приложить импульс, момент вращения (ApplyImpulse, ApplyTorque).

Второй пример к статье демонстрирует выстрел пули, сила приводит пулю в движение.

Связи

Для создания сложных подвижных объектов необходимы связи. В Box2D присутствует множество типов связей:

1. Дистанционная связь - тела всегда находятся на одном и том же расстоянии.

Дистанционная связь Box 2D

2. Связь вращения - тела могут вращаться относительно друг друга на определённый угол.

Связь вращения Box 2D

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

Призматическая связь Box 2D

Это не все, но основные типы связей.

Например, чтобы создать дистанционную связь необходимо заполнить объект b2DistanceJointDef.

Необходимо задать тела и точки связи в мировых координатах.

После этого необходимо создать связь методом:

Примеры

Вы можете скачать пример (Box2DSample.zip), который содержит 3 уровня. Между уровнями можно переключаться клавишами "Влево" и "Вправо". Для визуализации использовался SDL и OpenGL.

Первый пример просто демонстрирует гравитацию. При нажатии клавиши "Пробел" будет создан ещё один куб. Объекты также можно перемещать мышкой.

Второй пример демонстрирует силы. При нажатии пробела пуля будет выпущена в курсор мыши.

Третий пример демонстрирует связи. В этом примере можно перемещать грузы и поэкспериментировать с весами.

Пример использования Box2D
При полном или частичном копировании необходимо указывать прямую ссылку на данную статью.



Oleg

Олег (Дата )

Все вопросы и предложения высылайте на адрес soft_support@list.ru. Необходимо в заголовке указать название статьи.

Оставь свой отзыв


Ответьте на вопрос (ответ маленькими буквами)* :
три плюс пять(ответ цифрами)


Дата: 26.08.11