博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Three.js场景运动
阅读量:6038 次
发布时间:2019-06-20

本文共 2359 字,大约阅读时间需要 7 分钟。

  场景动起来有两种方式:第一种方法是让物体在坐标系里面移动,摄像机不动。第二种方法是让摄像机在坐标系里面移动,物体不动。这样场景就能够动起来了。

一、渲染循环

  如果想要将场景绘制到浏览器中,就需要调用渲染器的render()函数。代码如下:

renderer.render( scene, camera );

  所以在物体运动过程中,如果场景发生改变,就需要重新调用render()函数重新渲染场景到浏览器,所以,我们需要一个渲染循环。

  为了实现循环,我们需要javascript的一个特殊函数,这个函数是requestAnimationFrame。

  调用requestAnimationFrame函数,传递一个callback参数,则在下一个动画帧时,会调用callback这个函数。

  于是,我们的游戏循环会这样写。

function animate() {render();requestAnimationFrame( animate );}

  这样就会不断的执行animate这个函数。也就是不断的执行render()函数。在render()函数中不断的改变物体或者摄像机的位置,并渲染它们,就能够实现动画了。

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

            
Three框架

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

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

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

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

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

renderer.render(scene, camera);

三、改变物体自身位置,让物体移动

            
Three框架

  通过移动物体本身的位置来让物体运动,代码如下:

mesh.position.x-=1;

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

四、性能监视器Stats

            
Three框架

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();

 五、创建动画

            
Three框架

  为了使程序编写更容易一些,我们可以使用动画引擎来实现动画效果。和three.js紧密结合的动画引擎是Tween.js,Tween.js是一个容易上手的工具。

首先,你需要引用js文件,如下:

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

第二步,就是构件一个Tween对象,对Tween进行初始化,本例的代码是:

function initTween(){    new TWEEN.Tween( mesh.position)            .to( { x: -400 }, 3000 ).repeat( Infinity ).start();}

第三步是,需要在渲染函数中去不断的更新Tween,这样才能够让mesh.position.x移动位置:(update是为了将动画移动的过程渲染进去)

function animation(){    renderer.render(scene, camera);    requestAnimationFrame(animation);    stats.update();    TWEEN.update();}

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

六、出处

刚接触Three.js,这算是记录网上找资料学习的笔记,主要来源于,如有侵权,请删除。

转载于:https://www.cnblogs.com/shenjie0507/p/9074149.html

你可能感兴趣的文章
原码、反码、补码的正(nao)确(can)打开方式
查看>>
《算法导论》
查看>>
ResourceBundle.getBundle方法demo
查看>>
基于Dubbo的http自动测试工具分享
查看>>
[linux] C语言Linux系统编程-TCP通信的11种状态
查看>>
{head first} --- networking 3
查看>>
SpringCloud入门之YAML格式文件规范学习
查看>>
深入理解Dalvik虚拟机- 解释器的执行机制
查看>>
android------2018 年初值得关注的 16 个新 Android 库和项目
查看>>
Mac eclipse 连接安卓手机调试 adb
查看>>
国际巨头互联网公司一些运营与管理思路
查看>>
数据库~Mysql里的Explain说明
查看>>
linux arm的存储分布那些事之一【转】
查看>>
跨域详解
查看>>
网卡bonding模式 - bond0、1、4配置
查看>>
<转>LUA语法分析
查看>>
Windows网络接口API函数
查看>>
移除input在type="number"时的上下箭头
查看>>
HBase学习之路 (七)HBase 原理
查看>>
Mac vim“装逼”配置
查看>>