• 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

  • 相关阅读:
    一个故事告诉你,数据分析如何给企业带来价值
    【CS231n】斯坦福大学李飞飞视觉识别课程笔记(九):最优化笔记(上)
    区块链P2P网络详细讲解
    互联网协议入门
    BitTorrent DHT 协议中文
    基于侧链的P2P网络设计
    【转】P2P-BT对端管理协议
    P2P网络与BitTorrent技术简介
    【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pk创建自定义类
    爱创课堂每日一题第五十四天- 列举IE 与其他浏览器不一样的特性?
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/9640543.html
Copyright © 2020-2023  润新知