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

Шрифт
Фон

b2Vec2 GetReactionForce(); float32 GetReactionTorque();

7.4.1. Использованиесоединений "жесткийотрезок"

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

7.4.2. Использованиеболтовыхсоединений

Можно узнать угол поворота болтового соединения, скорость и вращающий момент мускула.

float32 GetJointAngle() const;

float32 GetJointSpeed() const; float32 GetMotorTorque() const;

Также можно изменять параметры мускула хоть на каждом шаге.

void SetMotorSpeed(float32 speed); void SetMaxMotorTorque(float32 torque);

Мускул соединения имеет интересные возможности. Можно обновлять скорость соединения каждый временной шаг, что позволяет заставить соединение выполнять возвратно поступательные движения или по другому закону в соответствии с вашей функцией.

... Начало игрового цикла ... myJoint->SetMotorSpeed(cosf(0.5f * time)); ... Конец игрового цикла ...

Можно использовать мускул соединения для поддержания определенного угла соединения. Например: ... Начало игрового цикла ...

float32 angleError = myJoint->GetJointAngle() - angleTarget; float32 gain = 0.If;

myJoint->SetMotorSpeed(-gain * angleError); ... Конец игрового цикла ...

Обычно параметр усиления (gain) не задаётся слишком большим, иначе соединение может стать нестабильным.

7.4.3. Использованиепризматическихсоединений

Использование призматических соединений подобно использованию болтовых. Ниже приведены основные методы соединения:

float32 GetJointTranslation() const; float32 GetJointSpeed() const; float32 GetMotorForce() const; void SetMotorSpeed(float32 speed); void SetMotorForce(float32 force);

7.4.4. Использованиеталевыхсоединений

Талевые соединения предоставляют нам текущие длины.

float32 GetLengthl() const; float32 GetLength2() const;

7.4.5. Использованиепередаточныхсоединений

Передаточные соединения не предоставляют никакой информации, кроме той, что определена в классе b2Joint.

7.4.6. Использованиесоединенийскурсороммыши

Соединение с курсором мыши позволяет перетаскивать присоединенные объекты, обновляя позицию на каждом шаге.

Глава 8. Контакты

Содержание

8.1. О контактах 8.2. Обработчик контактов 8.3. Фильтрация контактов

8.1. О контактах

Контакты это объекты, создаваемые

Box2D для управления столкновениями фигур.

Существуют различные виды контактов, которые наследуются от класса b2Contact, для

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

контактов для столкновения полигон-полигон и класс для столкновения

окружность-окружность. Это знать не обязательно, можно лишь иметь представление.

Существует некоторая терминология, используемая для описания контактов. Эта

терминология в основном предназначена для Box2D, но вы можете встретить подобную в

других физических движках.

точкаконтакта(contact point) точка контакта это точка столкновения двух фигур. В

реальности объекты имеют пятно контакта, при столкновении поверхностей. Box2D

упрощает это, используя лишь небольшое число точек контакта.

нормальконтакта(contact normal)

нормаль контакта это единичный вектор, направленный от shapel к shape2.

разделениеконтакта(contact separation)

разделение контакта это противоположность глубины проникновения. Разделение

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

сможет создавать точки контакта с положительным разделением и можно будет

проверить знак разделения при уведомлении о контактах.

нормальнаясила(normal force) Box2D использует итеративный решальщик

столкновений и хранит результаты вычислений в точках контакта. Можно безболезненно

использовать нормальную силу для определения силы удара. Например, можно

использовать её для создания разрушающихся предметов или для проигрывания звука

при ударе.

касательнаясила(tangent force) касательная сила используется для моделирования

силы трения.

идентификаторыконтактов(contact ids) Box2D, по возможности, использует,

вычисленные на предыдущем шаге силы, для контактов следующего шага в качестве

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

используются идентификаторы контактов. Идентификаторы содержат индексы

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

другой.

Контакты создаются при пересечении ААВВ двух фигур. Иногда фильтрация столкновений предотвращает создание контактов. Для Box2d иногда требуется создать контакт, несмотря на фильтрацию столкновений. В таком случае используется b2NullContact, который не подвержен фильтрации. Контакты уничтожаются, когда ААВВ фигур перестают пересекаться.

Удивительно, но контакты могут создаваться для фигур, которые не пересекаются (пересекаются только их ААВВ). Это не является неправильной работой, а называется проблемой "курица или яйцо" (что появилось раньше?). Нам неизвестно необходим ли нам объект контакта, пока он не будет создан для анализа столкновения. Мы можем удалить контакт сразу после того как фигуры перестанут пересекаться или просто можем подождать пока перестанут пересекаться ААВВ фигур. Box2D использует последний подход.

8.2. Обработчик контактов

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

0
Шрифт
Фон

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