В библиотеке Oimo.js объект ShapeConfig
представляет собой универсальную конфигурацию для всех физических форм.
Он используется для задания физических свойств тела, которые влияют на
взаимодействие с другими объектами в симуляции: столкновения, трение,
упругость и массу. ShapeConfig не зависит от конкретного
типа формы — будь то куб, сфера, цилиндр или меш.
density — плотность объекта Параметр определяет массу объекта относительно его объёма. Масса вычисляется как произведение плотности на объём формы:
shapeConfig.density = 1.0; // кг/м³
Высокое значение плотности делает объект тяжелее и устойчивее при столкновениях. Для имитации легких объектов (например, воздушных шаров) используют малую плотность.
friction — коэффициент трения Определяет сопротивление скольжению между контактирующими формами. При трении 0 объекты скользят без сопротивления, при трении 1 — движение почти полностью блокируется:
shapeConfig.friction = 0.5;
Трение влияет как на линейное движение, так и на вращение тела при контакте с поверхностью.
restitution — коэффициент упругости Определяет, насколько объект отскакивает при столкновении. Значение от 0 (абсолютно неупругое столкновение) до 1 (идеально упругое):
shapeConfig.restitution = 0.8;
Этот параметр критичен при моделировании шаров, мячей и любых объектов, где важна динамика отскоков.
collisionGroup и collisionMask
— управление коллизиями Позволяют задавать группы столкновений.
collisionGroup определяет принадлежность формы к
определённой группе, а collisionMask — с какими группами
объект может сталкиваться:
shapeConfig.collisionGroup = 1;
shapeConfig.collisionMask = 0xFFFFFFFF; // столкновения со всеми
Это позволяет создавать фильтры столкновений, например, для различной физики между персонажами и окружением.
isTrigger — триггерное тело Булевый параметр, указывающий, что форма не участвует в физическом взаимодействии, а лишь сообщает о контакте:
shapeConfig.isTrigger = false;
Триггерные объекты полезны для зон активации, сенсоров и детекторов столкновений без воздействия на физику мира.
Формы создаются через конструкторы конкретного типа, например
Box, Sphere, Cylinder, и
используют экземпляр ShapeConfig для задания физических
свойств:
const config = new OIMO.ShapeConfig();
config.density = 2.0;
config.friction = 0.4;
config.restitution = 0.6;
const box = new OIMO.Box(config, new OIMO.Vec3(1, 1, 1));
При этом одна конфигурация может применяться к нескольким формам, что удобно для унификации физических характеристик объектов одного типа.
ShapeConfig тесно интегрирован с объектами
RigidBody. Физические свойства формы влияют на массу, центр
масс, динамику столкновений и поведение тела при силовом воздействии.
Изменение параметров ShapeConfig после добавления формы к
телу не всегда обновляет физические свойства автоматически, поэтому
оптимально задавать конфигурацию до создания RigidBody.
const bodyConfig = new OIMO.RigidBodyConfig();
bodyConfig.type = OIMO.RigidBodyType.DYNAMIC;
const body = new OIMO.RigidBody(bodyConfig);
body.addShape(box); // box использует shapeConfig
localOffset — смещение формы относительно центра тела Позволяет корректировать расположение коллайдера без изменения геометрии:
shapeConfig.localOffset = new OIMO.Vec3(0, 1, 0);localRotation — поворот формы относительно тела Используется для наклонных или ориентированных коллайдеров:
shapeConfig.localRotation = new OIMO.Mat3().fromEuler(0, Math.PI/4, 0);groupId — дополнительная идентификация для пользовательской логики Может применяться для фильтрации столкновений на уровне скриптов, вне стандартных групп Oimo.js.
density и
restitution в зависимости от желаемого поведения. Тяжёлые
объекты с низкой упругостью почти не отскакивают.collisionGroup и collisionMask значительно
ускоряет расчёт столкновений.Использование ShapeConfig позволяет гибко управлять
физикой объекта на уровне формы, обеспечивая точное моделирование
столкновений, трения и динамики в 3D-мире Oimo.js.