Erіn Catto - Box2D v 2 стр 9.

Шрифт
Фон

const b2Vec2& GetWorldCenter () const; МОЖНО получить доступ К ЛИНеЙНОЙ И УГЛОВОЙ

скорости тела. Линейная скорость устанавливается для центра масс.

void SetLinearVelocity(const b2Vec2& v); b2Vec2 GetLinearVelocity() const; void SetAngularVelocity(float32 omega); float32 GetAngularVelocity() const;

5.4.4. Силыиимпульсы

К телу можно применять силы, моменты и импульсы. При применении силы или импульса указывается мировая координата их приложения. Часто при этом возникает момент вращения вокруг центра масс.

void ApplyForce(const b2Vec2& force, const b2Vec2& point); void ApplyTorque(float32 torque); void Applylmpulse(const b2Vec2& impulse, const b2Vec2& point);

Применение силы, момента или импульса выводит тело из состояния сна. Иногда требуется применить силу только для бодрствующих тел, для этого случая подойдет следующий код:

if (myBody->IsSleeping() == false)

{

myBody->ApplyForce(myForce, myPoint);

}

5.4.5. Преобразованиекоординат

Класс b2Body имеет вспомогательные функции для преобразования точек и векторов между локальными и мировыми координатами. Если вам неясны эти понятия, то можно ознакомиться с книгой "Essential Mathematics for Games and Interactive Applications" авторов Jim Van Verth и Lars Bishop. Эти функции не ресурсоёмкие, так что ими можно смело пользоваться.

b2Vec2 GetWorldPoint(const b2Vec2& localPoint); b2Vec2 GetWorldVector(const b2Vec2& localVector); b2Vec2 GetLocalPoint(const b2Vec2& worldPoint); b2Vec2 GetLocalVector(const b2Vec2& worldVector);

5.4.6. Списки

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

for (b2Shape* s = body->GetShapeList(); s; s = s->GetNext())

{

MyShapeData* data = (MyShapeData*)s->GetUserData(); ... сделать что-то ... }

Таким же образом можно пройтись по всем соединениям тела.

Глава 6. Фигуры

Содержание

6.1. О фигурах 6.2. Определение фигуры 6.2.1. Коэффициенты трения и восстановления 6.2.2. Плотность 6.2.3. Фильтрация столкновений 6.2.4. Сенсоры 6.2.5. Определение Окружности 6.2.6. Определение Полигона 6.3. Фабрика фигур 6.4. Использование фигур

6.1. Офигурах

Фигуры это геометрия, которая подсоединяется к телам и используется для проверки столкновений между ними. Фигуры также используются для определения массы тела. Это позволяет определить массу тела лишь задав плотность, Box2D сделает все вычисления сам.

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

Фигуры всегда принадлежат определенному телу. К одному телу можно присоединить несколько фигур. Фигуры являются абстрактными классами, поэтому в Box2D могут быть реализованы различные их типы. Поэтому при желании можно создать свой собственный тип фигур и соответствующие алгоритмы расчета столкновений между ними.

6.2. Определениефигуры

Определения фигур используются для создания фигур. В определении b2ShapeDef присутствует как общая для всех информация, так и специфичная информация для отдельных типов фигур.

6.2.1. Коэффициенты трения и упругости

Трение используется для создания реалистичного скольжения одних объектов по другим. Box2D поддерживает статическое и динамичное трение, но использует один и тот же параметр для обоих. Трение в Box2D моделируется безошибочно, и сила трения пропорционально зависит от величины нормальной силы (трение Колумба). Параметр трения имеет значение в пределах от 0 до 1. Ноль соответствует отсутствию трения, а единица максимальному трению. При вычислении трения между двумя телами, Box2D должен использовать коэффициенты трения обоих тел. Результирующее трение вычисляется по следующей формуле:

float32 friction; friction = sqrtf(shapel->friction * shape2->friction);

Коэффициент упругости используется при столкновении тел. Значение коэффициента может быть из диапазона от 0 до 1. Например, при падении шара на стол, значение О означает, что шар не отскочит - это называется не упругое столкновение, при единице же шар отскочит с той же скоростью -- это абсолютно упругое столкновение. При столкновении двух тел результирующий коэффициент вычисляется

по следующей формуле:

float32 restitution;

restitution = Ь2Мах(shapel->restitution, shape2->restitution);

Если тела имеют несколько точек соприкосновения, то восстановление моделируется приближенно. Это происходит из-за того, что Box2D использует итеративный "разрешальщик" столкновений. Box2D также использует не эластичные столкновения, если скорость столкновения мала. Это необходимо для предотвращения дрожания тел.

6.2.2. Плотность

При необходимости Box2D может вычислить массу и момент инерции тел, используя плотность присоединенных фигур. Указание массы тела вручную, часто приводит к плохому моделированию, поэтому, лучшим путём задания массы тела будет сначала указание плотностей всех фигур тела, а затем вызов b2Body::SetMassFromShape.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке