btSphereShape — это класс физического движка Ammo.js,
используемый для создания сферических коллизийных форм. В основе лежит
геометрия сферы, что делает этот тип примитивов особенно эффективным для
расчета столкновений и физического взаимодействия объектов с округлой
формой.
Для создания сферы необходимо передать радиус в конструктор:
let radius = 2.0;
let sphereShape = new Ammo.btSphereShape(radius);
Ключевые моменты:
btSphereShape наследует основные методы от базового
класса btCollisionShape. Наиболее часто используемые методы
включают:
getRadius() — возвращает текущий
радиус сферы.setMargin(margin) — задаёт так
называемое “соприкосновение” (collision margin), важное для точности
симуляции столкновений.calculateLocalInertia(mass, inertia) —
вычисляет момент инерции для сферы с заданной массой.getBoundingSphere(center, radius) —
возвращает параметры ограждающей сферы, что полезно для
оптимизации.Пример вычисления момента инерции:
let mass = 5;
let localInertia = new Ammo.btVector3(0, 0, 0);
sphereShape.calculateLocalInertia(mass, localInertia);
Этот вектор localInertia потом используется при создании
btRigidBody.
Сфера обычно применяется в качестве формы для динамических тел
(btRigidBody). Пример создания тел с физикой:
let startTransform = new Ammo.btTransform();
startTransform.setIdentity();
startTransform.setOrigin(new Ammo.btVector3(0, 10, 0));
let mass = 1;
let localInertia = new Ammo.btVector3(0, 0, 0);
sphereShape.calculateLocalInertia(mass, localInertia);
let motionState = new Ammo.btDefaultMotionState(startTransform);
let rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, motionState, sphereShape, localInertia);
let rigidBody = new Ammo.btRigidBody(rbInfo);
physicsWorld.addRigidBody(rigidBody);
Особенности:
btSphereShape удобно использовать
стандартные силы, такие как гравитация и импульсы.btCompoundShape), в том числе сфер, для упрощения расчета
столкновений.btCompoundShape.setUnscaledRadius(), однако это редко используется в
реальном времени из-за необходимости перерасчета инерции и
коллизий.btSphereShape в Ammo.js является фундаментальным
строительным блоком для симуляции сферических тел, обеспечивая сочетание
простоты, точности и высокой производительности.