zoukankan      html  css  js  c++  java
  • WebGL4---让场景动起来

              1、场景如何动起来?

                     有两种实现方式:1)让物体在坐标系里面移动,摄像机不动;2)让摄像机在坐标系里面移动,物体不动;

          

               2、循环渲染

                     如果我们改变了物体的位置或者颜色之类的属性,就必须重新调用render()函数,才能将新的场景绘制到

                浏览器中。否则浏览器不会自动刷新场景的;

                                 renderer.render(scene,camera);

                 关于循环渲染代码:

                                function animate(){

                                      render();

                                      requestAnimationFrame(animate);//调用requestAnimationFrame函数,传递一个callback函数,则在

                                                                                                    下一个动画帧时,会调用callback;

                                 }

               

                  3、改变相机的位置,让物体移动

                       关键代码如下:

                               function animation(){

                                       camera.position.x = camera.position.x +1; //不断将相机的位置沿X轴移动1个单位。相机向右移动;

                                       renderer.render(scene,camera);

                                       requestAnimationFrame(animation);

                               }

                    4、改变物体自身的位置

                     关键点: mesh.position.x - =1;//其中mesh是指物体

                     5、物体运动后,如何评估性能?

                     在3D的世界中,经常使用帧数的概念来评估性能;

                     帧数:图形处理器每秒钟能够刷新几次,通常使用fps(Frames Per Second)来表示;

                     5.1)性能监视器Stats

                              在Three.js中,性能由一个性能监视器来管理;其中,FPS表示上一秒的帧数,这个值越大越好,一般在60左右;

                     当点击图片后就显示另一个衡量指标:MS(渲染一帧需要的毫秒数,这个值越小越好);

                     5.2)性能监视器Stats的使用

                              在Three.js中,性能监视器被封装在一个类中,这个类叫做Stats,如下代码:

                      var stats = new Stats();

                      stats.setMode(1); //参数为0表示显示FPS界面,参数为1表示MS界面;

                       stats.domElement.style.position = "absolute";

                      stats.domElement.style.left = "0px";

                      stats.domElement.style.top = "0px";

                      document.body.appendChild(stats.domElement);//stats的domElement表示绘制的目的地(DOM)

                      setInterval(function(){

                            stats.start(); 

                            //你的每一帧代码

                            stats.end();

                      },1000/60);//关于Stats的begin和end函数本质上是在统计代码执行的时间和帧数,fps = 帧数/时间;该功能被封装在函数update

                                              只要在渲染循环中调用即可;

                     代码实例如下:

                     ① 在initThree函数中声明stats

                     stats = new Stats();

                     stats.domElement.style.position = "absolute";

                     stats.domElement.style.x = "0px";

                     stats.domElement.style.y = "0px";

                     document.getElementById('canvas-frame').appendChild(stats.domElement);

                     ② 在animation函数中加入update函数

                       stats.update();

                      6、使用动画引擎Tween.js来创建动画;

                            ①引入引擎文件  <script src="Tween.js"></script>

                            ② 构建一个Tween对象,对Tween进行初始化,

                                function initTween(){

                                      new TWEEN.Tween(mesh.position)//TWEEN.Tween的构造函数接受的是改变属性的对象;注意:Tween的任何一个函数返回都是自身;

                                                           .to({ x: -400},3000)//to函数,接受两个参数,第一个参数是集合,表示动画结束后需要移动到的位置;第二个参数,是完成动画需要的时间,这里是3000ms

                                                           .repeat(Infinity)//表示重复无穷次,也可以接受一个整数;

                                                           .start();//表示动画开始,默认情况下是匀速的将mesh.position.x移动到-400位置

                                }

                              ③ 在渲染函数中去不断更新Tween;(TWEEN.update())

  • 相关阅读:
    题解 CF432D 【Prefixes and Suffixes】
    题解 P3199 【[HNOI2009]最小圈】
    题解 AT1221 【水筒】
    题解 P4381 【[IOI2008]Island】
    题解 CF1242B 【0-1 MST】
    《数据库系统概论》 -- 3.1 SQL概论和DDL
    《数据库系统概论》 -- 2. 关系操作
    《数据库系统概论》 -- 1. 绪论
    配置vim成为IDE
    ubuntu--软件管理
  • 原文地址:https://www.cnblogs.com/sunqq/p/10407339.html
Copyright © 2011-2022 走看看