Библиотека Cannon.js изначально создавалась как лёгкий и модульный физический движок для JavaScript. Её архитектура позволяет не только использовать встроенные примитивы и механизмы симуляции, но и расширять функциональность через плагины и сторонние расширения. Основной принцип расширяемости — независимость ядра движка от конкретных реализаций сложных коллизий, материалов и кастомных интеграторов.
Плагин для Cannon.js обычно представляет собой модуль или набор функций, которые добавляют новые возможности к сцене, телам или материалам. Стандартная структура включает:
Body, World, Shape или
Material.Пример шаблона простого плагина:
function CustomGravityPlugin(world, options = {}) {
this.world = world;
this.gravityFactor = options.gravityFactor || 1;
world.addEventListener('preStep', () => {
world.bodies.forEach(body => {
body.applyForce(new CANNON.Vec3(0, -9.82 * this.gravityFactor * body.mass, 0));
});
});
}
1. Расширения коллизий
Плагины могут добавлять новые типы форм или улучшать существующие алгоритмы столкновений. Например:
2. Материалы и силы
Плагины для материалов позволяют моделировать новые физические эффекты:
3. Интеграторы и шаги симуляции
Базовый интегратор Euler в Cannon.js прост и быстрый, но
иногда требуется точность или специализированная физика. Плагины
могут:
Runge-Kutta для стабильной
симуляции при малых шагах времени.4. Визуализация и дебаг
Хотя визуализация не является частью ядра Cannon.js, существуют плагины для:
Плагины обычно подключаются через импорт и инициализацию после создания мира:
import * as CANNON from 'cannon-es';
import { CustomGravityPlugin } from './plugins/customGravity.js';
const world = new CANNON.World();
const gravityPlugin = new CustomGravityPlugin(world, { gravityFactor: 2 });
Ключевой момент — порядок инициализации. Плагин должен быть подключён
до начала симуляции, чтобы события типа preStep или
postStep корректно обрабатывались.
preStep, postStep и
addEventListener.cannon-es) при разработке, чтобы
плагины были переносимыми.Сообщество активно делится расширениями через GitHub и npm. Многие плагины не только расширяют функциональность, но и служат примером для написания собственных модификаций. Практика совместного использования позволяет создавать сложные симуляции: транспортные системы, динамику мягких тел, жидкости и ткани, а также комплексные механизмы с ограничениями.
Разработка плагинов делает Cannon.js не просто библиотекой для базовой физики, но полноценной платформой для моделирования любых интерактивных сред в браузере.