• three.js-Basic-Expand


    Three.js学习笔记 本篇为基础扩展部分(学习使用插件扩展你的三维场景)

    WebGL支持

    目前绝大部分主流浏览器是支持WebGL的,但是IE的大部分版本并不支持WebGL。
    所以如果你想使用旧版本的IE浏览器,可以通过下载chromeGoogle Chrome Frame插件
    也可以使用iewebgl

    同时对于浏览器的WebGL支持的检测也是必不可少的。
    three.js提供了Detector.js用来检测浏览器对于WebGL的支持。

    
    <script src="js/Detector.js"></script>
        if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
    
    

    检测浏览器窗体

    从上篇的Demo可以看到我们设置渲染的大小为window.innerWidth``window.innerHeight也就是浏览器窗体的大小。
    当我们的浏览器窗体发生变化的时候,就会发生很尴尬的情况。
    resize

    所以当窗体发生变化的时候,我们需要更新相机的信息。并且设置新的window.innerWidth``window.innerHeight

    
        window.addEventListener( 'resize', onWindowResize, false );
        
        function onWindowResize() {
    
    				camera.aspect = window.innerWidth / window.innerHeight;
    				camera.updateProjectionMatrix();
    
    				renderer.setSize( window.innerWidth, window.innerHeight );
    			}
    
    
    

    性能检测

    在3D世界里经常通过帧数FPS(Frames Per Second)来评估一个程序的性能。
    帧数越高,画面越流畅。大部分的游戏帧数都会超过30。
    three.js提供了stats.js用来检测程序的性能。

    
    <script src="js/stats.min.js"></script>
    
        //新建一个信息框
        var stats = new Stats();
        
        // 0: fps, 1: ms, 2: mb, 3+: custom
        stats.showPanel( 1 ); 
        
        document.body.appendChild(stats.domElement);
        
        //渲染函数
        function render(){
             //实时渲染
             stats.update();
            }
    
    
    
        //手动开关监控器
        stats.begin();
        stats.end();
    
    

    Panel效果图:
    panel

    控制面板

    dat.gui.js
    使用dat.gui.js可以在页面生成一个控制面板方便你直接控制三维场景中的对象。
    以前一篇的Demo为例,通过面板控制Cubewidthheightdepth

    
    <script src="js/dat.gui.min.js"></script>
    
         var controls = new function () {
                //初始化width,height和depth属性
                this.width = 4;
                this.height = 4;
                this.depth = 4;
                
                //重绘函数
                this.redraw = function () {
                
                    //移出旧的cube
                    scene.remove(cube);
                    
                    //重绘三维图形
                    var geometry = new THREE.CubeGeometry(controls.width, controls.height, controls.depth);
    
    				var material = new THREE.MeshBasicMaterial({
    					color: 0x4d6dad
    				});
    
    				var mesh = new THREE.Mesh(geometry, material);
    				//添加新的cube
                    scene.add(cube);
                };
           }
         
         //实例化一个gui对象  
         var gui = new dat.GUI();
             
             gui.add(controls, 'width', 0, 40).onChange(controls.redraw);
             gui.add(controls, 'height', 0, 40).onChange(controls.redraw);
             gui.add(controls, 'depth', 0, 40).onChange(controls.redraw);
    
    
    

    gui效果图:
    gui

    补间动画

    tween.js
    tween.js是一个小型的JavaScript库。你可以用来定义某个属性在两个值之间的过渡。
    它会自动计算出起始值到结束值之间的所有中间值。从来在三维场景中实现动画效果。

    以前一篇的Demo为例,通过tween.js控制Cubeposition

    
    <script src="js/tween.min.js"></script>
       
       //定义要控制的对象
        var option = {  
           px: cube.position.x
       };  
       
        /*  
         *  .to 定义起始值和结束值 ,1000划分的中间值个数
         *  .delay 定义开始延时
         *  .start 开启补间动画
         */ 
         
        
        var tween = new TWEEN.Tween(option)  
            .to({  
                    px: [-50, -40, -40, -50]
            }, 1000)  
            .onUpdate(function() {  
                cube.position.x = this.px;
            })  
            .delay(1000)  
            .start();  
        
        //渲染函数
        function render() {  
            
            //实时更新
            TWEEN.update();  
            
            requestAnimationFrame(render);  
            renderer.render(scene, camera);  
                      
    }  
        // 你也可以调用tween.chain(tween)函数使动画循环播放或是几个动画连续播放。
    

    outPut

    View source

    source code

  • 相关阅读:
    Educational Codeforces Round 61
    Codeforces Round #548 (Div. 2)
    Codeforces Round #553 (Div. 2)
    spring mvc接口跨域访问
    json解析;百度统计API返回data解析
    HTML img标签使用base64展示图片
    My Sql 查询连续天数数据
    js 获取url地址栏拼接参数
    在jsp页面获取绝对路径
    java web项目配置Tomcat访问项目外文件
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/9640433.html
Copyright © 2020-2023  润新知