Three.js学习笔记02

时间:2022-04-20 13:40:18

1.改变相机的位置,让物体移动

通过下面的代码改变相机的位置:

camera.position.x =camera.position.x +1;

将相机不断的沿着x轴移动1个单位,也就是相机向右移动。相机向右移动,相机中的物体是向左移动的。

设置完相机的位置后,我们调用requestAnimationFrame(animation)函数,这个函数又会在下一个动画帧出发animation()函数,这样就不断改变了相机的位置,从而物体看上去在移动了。

必须要重视render函数:renderer.render(scene, camera);,这个函数是重新绘制渲染结果,如果不调用这个函数,那么即使相机的位置变化了,但是没有重新绘制,仍然显示的是上一帧的动画。

2 改变物体自身的位置,让物体移动

通过下面的代码改变物体的位置:

mesh.position.x-=1;

其中mesh就是指的物体,它有一个位置属性position,这个position是一个THREE.Vector3类型变量,所以你要把它向左移动,只需要将x的值不断的减少就可以了。

3 物体运动后,怎么评估程序的性能

关于性能:测试一个程序,性能上是否有瓶颈,在3D世界里,经常使用帧数的概念,首先我们来定义一下帧数的意义。

帧数:图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)来表示。如下是每秒钟59次刷新的应用:

Three.js学习笔记02

当物体在快速运动时,当人眼所看到的影像消失后,人眼仍能继续保留其影像1/24秒左右的图像,这种现象被称为视觉暂留现象。是人眼具有的一种性质。人眼观看物体时,成像于视网膜上,并由视神经输入人脑,感觉到物体的像。一帧一帧的图像进入人脑,人脑就会将这些图像给连接起来,形成动画。

毫无疑问,帧数越高,画面的感觉就会越好。所以大多数游戏都会有超过30的FPS。为了监视FPS,看看你的程序哪里占用了很多的CPU时间,就需要学习一下性能监视器。

1、性能监视器Stats

在Three.js中,性能由一个性能监视器来管理,它的介绍在https://github.com/mrdoob/stats.js 可以看到。

其中FPS表示:上一秒的帧数,这个值越大越好,一般都为60左右。点击上面的图,就会变成下面的另一个视图。

MS表示渲染一帧需要的毫秒数,这个数字是越小越好。再次点击又可以回到FPS视图中。

Three.js学习笔记02Three.js学习笔记02

2、性能监视器Stats的使用

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

1、setMode函数

参数为0的时候,表示显示的是FPS界面,参数为1的时候,表示显示的是MS界面。

2、stats的domElement

stats的domElement表示绘制的目的地(DOM),波形图就绘制在这上面。

3、begin

begin,在你要测试的代码前面调用begin函数,在你代码执行完后调用end()函数,这样就能够统计出这段代码执行的平均帧数了。

5、性能测试实例

1、new 一个stats对象,代码如下

stats = new Stats();

2、将这个对象加入到html网页中去,代码如下

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

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

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

3、调用stats.update()函数来统计时间和帧数。代码如下

stats.update();

4 使用动画引擎Tween.js来创建动画

使用动画引擎来实现动画效果。和three.js紧密结合的动画引擎是Tween.js,你可以在https://github.com/sole下载。

对于快速构件动画来说,Tween.js是一个容易上手的工具。首先,你需要引擎js文件,如下:

<-script src="../js/tween.min.js" data-ke-src="../js/tween.min.js"><-/script>

第二步,就是构件一个Tween对象,对Tween进行初始化:

 

TWEEN.Tween的构造函数接受的是要改变属性的对象。Tween的任何一个函数返回的都是自身,所以可以用串联的方式直接调用各个函数。

to函数,接受两个参数,第一个参数是一个集合,里面存放的键值对,键x表示mesh.position的x属性,值-400表示,动画结束的时候需要移动到的位置。第二个参数,是完成动画需要的时间,这里是3000ms。

repeat( Infinity )表示重复无穷次,也可以接受一个整形数值,例如5次。

Start表示开始动画,默认情况下是匀速的将mesh.position.x移动到-400的位置。

第三步是,需要在渲染函数中去不断的更新Tween,这样才能够让mesh.position.x移动位置:

 

其中的TWEEN.update()完成了让动画动起来到目标。如果不调用这个函数场景就不能动起来了。

参考webGL中文网