three.js-physics engine

Three.js学习笔记 本篇介绍物理引擎库Physijs,通过物理引擎我们可以向场景添加重力、摩擦、约束条件或是碰撞检测等令人激动的效果。
Physijs是基于著名的物理引擎ammo.js。

learn more from https://chandlerprall.github.io/Physijs/

physijs

step1

导入库文件

    
    //任务线程 
    Physijs.scripts.worker = 'js/Physijs/physijs_worker.js';  
    
    //内部库ammo.js
    Physijs.scripts.ammo = 'js/Physijs/ammo.js';  

step2

创建带有物理效果的场景。

    
    
    var scene = new Physijs.Scene(); 
     
    //设置重力参数为y轴负方向,大小为10
    scene.setGravity(new THREE.Vector3(0,-10,0));  

step3

使用physijs库的Physijs.Mesh()、Physijs.createMaterial()将原Mesh()、Material()封装起来。


    var geometry = new THREE.CubeGeometry(10, 10, 10);  
    
    //参数 restitution(弹性形变)和friction(摩擦系数)
    var material = new Physijs.createMaterial(new THREE.MeshBasicMaterial({  
        restitution:0.5,  
        friction:0.5  
    }))  
    
    //物理场景创建的对象增添了第三个参数   1:可以正常运动   0:困定(类似于墙体)   默认值:1
    var mesh = new Physijs.BoxMesh(geometry,material,1);  


step4

渲染物理场景


    function render(){  
    
       requestAnimationFrame(render);  
       renderer.render(scene, camera);
        
       scene.simulate();  
    }  

这样我们就创建出了一个具有重力(y轴负方向大小为10),具有摩擦(摩擦系数为0.5)和碰撞的物体(弹性形变系数为0.5)的物体。
由于我们在物理场景中不能像以往一样通过在render()中使用position来控制物体进行运动。只能通过设置力或是设置速度。

所以很多时候物体的运动可能不尽人意,这的时候约束就显得很重要了。它可以保证被击飞的时候你的头在你的脖子上,汽车运动的时候它的轮子在车身上。

约束

种类

  • PointConstraint 点约束,你可以将两个对象约束起来,一个对象动了,另外一个对象也会动。
    
    // 前两个参数为两个对象
    //第三个参数为绑定的位置 一般来说你要仅仅将两个物体绑定在一起,最好设置在第二个对象的位置。
    
    var pointConstraint = new Physijs.PointConstraint(objectOne,objectTwo,objectPosition);

  • HingeConstraint 门约束,你可以将两个对象像一扇门的两部分一样约束起来。
    
    // 前两个参数为两个对象
    //第三个参数为绑定的位置 
    //最后一个参数为要绕着旋转的轴
    
    var hingeConstraint = new Physijs.HingeConstraint(objectOne,objectTwo,objectPosition,objectAxis);

  • SliderConstraint 轴约束,你可以将物体的移动限制在轴上。
    
    //也可以四个参数 如果你想将一个对象约束到另一个上面
    
    var hingeConstraint = new Physijs.HingeConstraint(objectOne,objectPosition,objectAxis);

etc...

这个demo里面由于两个物体在场景初始化的时候就相交了发生了弹性形变,所以会产生力分来。


outPut


outPut

View source

source code

posted @ 2018-09-13 14:59  可爱的黑精灵  阅读(1585)  评论(0编辑  收藏  举报