Я использую следующий код для создания двух сфер в cannonjs с помощью Three.js в качестве модуля рендеринга.cannonjs with Three.js, связывающий тело с сеткой
var world, mass, body, shape, timeStep=1/60,
camera, scene, renderer, geometry, material, mesh;
initThree();
initCannon();
animate();
function initCannon() {
world = new CANNON.World();
world.gravity.set(0,0,0);
world.broadphase = new CANNON.NaiveBroadphase();
world.solver.iterations = 10;
geometry = new THREE.SphereGeometry(3);
material = new THREE.MeshBasicMaterial({ color: 0xff0000, wireframe: true });
mesh = new THREE.Mesh(geometry, material);
body = new CANNON.Body({mass:0.2});
body.angularVelocity.set(0,5,0);
body.angularDamping = 0.9;
world.add(body);
scene.add(mesh);
geometry = new THREE.SphereGeometry(2);
material = new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: true });
mesh = new THREE.Mesh(geometry,material);
body = new CANNON.Body({mass: 1});
body.angularVelocity.set(0,10,0);
body.angularDamping = 0.5;
world.add(body);
scene.add(mesh);
}
function initThree() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 1, 100);
camera.position.z = 5;
scene.add(camera);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
}
function animate() {
requestAnimationFrame(animate);
updatePhysics();
render();
}
function updatePhysics() {
// Step the physics world
world.step(timeStep);
// Copy coordinates from Cannon.js to Three.js
mesh.position.copy(body.position);
mesh.quaternion.copy(body.quaternion);
}
function render() {
renderer.render(scene, camera);
}
В результате я получаю две сферы на дисплее, но только второе тело, объявленным в initCannon() одушевляет. Тело cannonjs каким-то образом не связано с сеткой Three.js. Я попробовал «body.mesh = mesh», но это не помогает.
Объявление для сетки было первоначально выполнено в initThree(), но я не считаю, что это имеет значение.
Что я делаю неправильно? Пожалуйста помоги. При необходимости запросите более подробную информацию.
Глядя на код, я не понимаю, почему у вас должны быть две сферы. Где вы добавляете второй? –
@JonasGrumann В initCannon(). Я добавляю один из радиуса 3, а затем один из радиуса 2. У меня есть две сферы, которые я вижу. Просто только вторая анимация с угловой скоростью – Cheeku