среда, 6 апреля 2016 г.

Описание классов Collision Shapes

Отсюда. Отрывки. https://www.raywenderlich.com/53077/bullet-physics-tutorial-getting-started
Масса(mass). Масса - это очевидно масса объекта, но у нее есть другое, не так очевидное обозначение. В Bullet вы можете создать три типа объектов, разница в которых определяется их массой.
1. Масса статического объекта нулевая (mass = 0). Такой объект неподвижен. В игре, например, это граница.
2. Масса кинематического объекта также нулевая, но вы можете двигать это объект в коде, просто устанавливая его позицию и поворот. Объекты мира при моделировании не смогут его сдвинуть. В игре, например, это весло и кирпич.
3. Масса динамического объекта ненулевая. Вы двигаете объект при помощи приложения к нему силы. В игре, например, это мяч. Вы устанавливаете его направление и скорость и включаете физический движок. Когда мяч ударяется о границу или о кирпич, он будет отскакивать назад, но он никогда не изменит позицию границы, кирпича или весла, т.к. они неподвижны.

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

Вы используете тег (tag) в обнаружения столкновений, чтобы определить, какие типы объектов столкнулись.

shape описывает форму физического тела. btCollisionShape является абстрактным классом, и есть несколько разных реализаций столкновения фигур. Например, можно описать форму объекта в виде сферы, используя btSphereShape или вы можете создать сложные формы с btBvhTriangleMeshShape указанием вершин треугольников, так же как при визуализации сложных объектов в OpenGL.

Создать корпус объекта можно с помощью готовых классов создания сфер, кубов(btBoxShape), btPolyhedralConvexShape() (многогранник), а можно задать по точкам (btConvexHullShape()).

Список классов создания корпуса объекта.

Классы создания корпуса объекта. 
btBox2dShape - это примитив квадрата вокруг начала координат, его оси сторон связаны с длиной, определенной полуразмерами в локальной системе координат. Когда используется как часть btCollisionObject or btRigidBody, это будет ориентированный квадрат в пространстве. Его размеры по оси Z = 0.

btBoxShape - это примитив куба вокруг начала координат, его оси сторон связаны с длиной, определенной полуразмерами в локальной системе координат. Когда используется как часть btCollisionObject or btRigidBody, это будет ориентированный куб в пространстве.

btBvhTriangleMeshShape - является фигурой из сетки статически-треугольной(static-triangle mesh shape), она может быть использована только для стационарных/недвижущихся объектов. Если требуется перемещение вогнутой сетки, рекомендуется выполнять выпуклую декомпозицию используя HACD, смотри Bullet/Demos/ConvexDecompositionDemo. Кроме того, вы можете использовать btGimpactMeshShape для перемещения вогнутой треугольной сетки. btBvhTriangleMeshShape имеет несколько оптимизаций, таких как иерархия ограничивающих объемов(bounding volume hierarchy) и кэш-фрэндли обход для PlayStation 3 ячейки СПУ(cache friendly traversal for PlayStation 3 Cell SPU). Рекомендуется включить useQuantizedAabbCompression для лучшего использования памяти. Принимают треугольные сетки в качестве входных данных, например btTriangleMesh или btTriangleIndexVertexArray. Класс btBvhTriangleMeshShape позволяет деформации сети с помощью метода refit или partialRefit. Вместо построения (the bounding volume hierarchy acceleration structure) структуры, также можно сериализовать (сохранить) и десериализировать(загрузить) структуры с диска. См. Demos\ConcaveDemo\ConcavePhysicsDemo.cpp для примера.

btCapsuleShape - представляет собой оболочку вокруг оси Y, (существует так же btCapsuleShapeX, выровненный вокруг оси X и btCapsuleShapeZ вокруг оси Z). Общая высота фигуры это height+2*radius, поэтому height - это только расстояние между центром каждой сферы на концах оболочки.
В btCapsuleShape является выпуклой оболочкой двух шаров. А btMultiSphereShape-это более общая форма столкновения, которая принимает выпуклую оболочку множественных сфере, поэтому она также может представлять собой капсулу, если задать только две сферы.

btCompoundShape позволяет хранить несколько других btCollisionShapes. Это позволяет двигать вогнутые объекты столкновения. Это более общие, чем статическая вогнутая сеть btBvhTriangleMeshShape. Он имеет (опционально) динамическое аавв дерево, чтобы ускорить тесты раннего отказа. В настоящее время удаление дочерних фигур поддерживается только при отключении опции аавв дерева (передать значение 'false в конструкторе btCompoundShape).

Класс btConcaveShape предоставляет интерфейс для неподвижных (статических) объектов вогнутой формы. Его реализуют btStaticPlaneShape, btBvhTriangleMeshShape и btHeightfieldTerrainShape.

btConeShape реализует примитивную форму конуса с центром в начале координат и на оси Y. Класс btConeShapeX выравнивается по оси X и btConeShapeZ вокруг оси Z.

btConvex2dShape позволяет использовать произвольные выпуклые фигуры как 2D выпуклой формы, где компонент Z полагается равным 0. Рекомендуется для btBox2dShape .

btConvexHullShape реализует создание неявный выпуклой оболочки из массива вершин.
Bullet предоставляет общие и быстрый детектор столкновений для выпуклых форм на основе GJK и EPA, используя localGetSupportingVertex.

btConvexTriangleMeshShape является выпуклой оболочки на основе треугольной сетки, но производительность не так хороша, как у btConvexHullShape. Малое преимущество этого класса в том, что он использует btStridingMeshInterface, так что вы можете избежать дублирования данных триангулированной сетки. Тем не менее, большинство пользователей должны использовать гораздо более производительный btConvexHullShape.

Класс btCylinderShape реализует примитивные формы цилиндра, с центром в начале координат. Его Центральная ось совмещена с осью у. btCylinderShapeX совмещена с осью X и btCylinderShapeZ вокруг оси Z.

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

Комментариев нет:

Отправить комментарий