cannon.js
//three.js 画个球
var geometry = new THREE.SphereGeometry(1, 32, 32);
var material = new THREE.MeshPhongMaterial({map: texture});
var mesh = new THREE.Mesh(geometry, material);
//cannon.js 模拟球
白鹿原李梦被换原因var body = new CANNON.Body({ mass: mass, material: new CANNON.Material({ friction: 0.5, restitution: 0.7}) });
var shape = new CANNON.Sphere(1);
body.addShape(shape);
cannon.js 构建物体的语法是不是和three.js很像,物体是body,需要形状shape,材质material。具体构建物体细节详见⽂档吧。。。
2.设置世界
three.js 世界初始化略。。
cannon:
let world = new CANNON.World();
world.broadphase = new CANNON.NaiveBroadphase();
world.solver.iterations = 10;
3.让物理世界动起来,cannon和three类似,我们把两者放⼀起模拟
update:function() {
world.step(1 / 60);
//three.js 的 render
白月光在照耀你才想起她的好
}
4.让物体动起来。我们需要把three中的物体和物理世界的物体绑定。
var animate = function() {
update();
//这两⾏,让mesh的位置、四元数和body保持⼀致
py(body.position);
nokiatune
py(body.quaternion);
requestAnimationFrame( animate );
};
animate();
基本⽤法就是这样。
⼩问题
1. cannon在构建box形状的物体时,
//若three中兄弟难当dj
楚雄彝族敬酒歌var geo = new THREE.BoxGeometry(1,1,1);
//那么cannon中,形状使⽤的尺⼨为半数
var shape = new CANNON.Box(new CANNON.Vec3(0.5,0.5,0.5));
2.想让物体有时受到重⼒,有时不受重⼒影响,这个需求的解决⽅案在Stack Overflow上看到有这么解决的:
//在需要的时候,在world.step()之前,将⽬标物体body在y轴⽅向上的重⼒抵消掉
update:function() {
body.force.y -= -9.8*body.mass;//-9.8为物理世界重⼒值
world.step(1 / 60);
}
希望可以发现更好的⽅法。
to be continued..
宋承宪最新消息刚开始⽤cannon,后续会继续踩坑。。