首页 > Web开发 > 详细

three.js-Basic-Expand

时间:2018-09-13 14:55:10      阅读:176      评论:0      收藏:0      [点我收藏+]

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也就是浏览器窗体的大小。
当我们的浏览器窗体发生变化的时候,就会发生很尴尬的情况。
技术分享图片

所以当窗体发生变化的时候,我们需要更新相机的信息。并且设置新的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效果图:
技术分享图片

控制面板

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效果图:
技术分享图片

补间动画

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)函数使动画循环播放或是几个动画连续播放。

技术分享图片

View source

source code

three.js-Basic-Expand

原文:https://www.cnblogs.com/chenjy1225/p/9640433.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!