Для работы с библиотеками cannon-es-debugger и three-cannon-debugger необходимо наличие базового окружения с Three.js и cannon-es. Установка через npm выполняется командой:
npm install cannon-es cannon-es-debugger three-cannon-debugger
После установки модули импортируются в проект:
import * as CANNON from 'cannon-es';
import CannonDebugger from 'cannon-es-debugger';
import ThreeCannonDebugger from 'three-cannon-debugger';
cannon-es-debugger обеспечивает визуализацию тел и их коллизий в 3D-сцене без прямой зависимости от Three.js, тогда как three-cannon-debugger интегрируется непосредственно с объектами Three.js, синхронизируя физические тела и графику.
Создание сцены и мира:
const world = new CANNON.World();
world.gravity.set(0, -9.82, 0);
world.broadphase = new CANNON.NaiveBroadphase();
world.solver.iterations = 10;
Создание тел:
const sphereShape = new CANNON.Sphere(1);
const sphereBody = new CANNON.Body({
mass: 5,
position: new CANNON.Vec3(0, 10, 0),
});
sphereBody.addShape(sphereShape);
world.addBody(sphereBody);
Инициализация cannon-es-debugger:
const cannonDebugger = new CannonDebugger(world, {
color: 0xff0000,
scale: 1
});
world — объект мира cannon-es.color — цвет визуализации.scale — масштаб отображаемых тел.Обновление визуализации в цикле анимации:
function animate() {
requestAnimationFrame(animate);
world.step(1 / 60);
cannonDebugger.update();
}
animate();
update() автоматически синхронизирует позиции и
ориентацию тел, отображая их в виде каркасных фигур.
Создание визуализатора для Three.js:
import * as THREE from 'three';
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
Инициализация three-cannon-debugger:
const debugger3D = new ThreeCannonDebugger(scene, world, {
color: 0x00ff00,
scale: 1
});
Синхронизация тел и объектов Three.js:
function animate() {
requestAnimationFrame(animate);
world.step(1 / 60);
debugger3D.update();
renderer.render(scene, camera);
}
animate();
Цвет и прозрачность: Можно задавать
color и opacity для визуализируемых тел, что
облегчает отладку сложных коллизий.
Масштабирование: Параметр scale
помогает подгонять размеры визуализаторов под единицы сцены
Three.js.
Фильтрация тел: В
three-cannon-debugger есть возможность визуализировать
только определённые типы тел (например, только сферы или ящики),
используя filter:
const debugger3D = new ThreeCannonDebugger(scene, world, {
filter: body => body.shapes[0] instanceof CANNON.Sphere
});
update() один раз на кадр, а для статичных тел можно
отключить их обновление.world.removeBody(sphereBody);
debugger3D.removeBody(sphereBody);
update() после каждого шага мира, чтобы
избежать рассинхронизации.Эти библиотеки позволяют видеть физическую логику cannon-es в реальном времени, упрощая отладку и тестирование сложных физических сцен в браузере.