多语言展示
当前在线:1447今日阅读:197今日分享:19

Three.js实现漫天雨滴的效果(粒子)

Three.js是一款开源的主流3D绘图JS引擎(名字Three就是3D的含义),用来简化WebGL编程,也提供了非常多的3D显示功能来实现很多炫酷的实例。  本文利用Three.js的粒子系统实现漫天雨滴的效果,最终效果如下图:
工具/原料
1

Sublime Tex

2

Chrome浏览器调试

编写静态页面

html代码和css样式如下图,这一块比较简单,也不是本文重点,代码可自行查看下图。

实现过程
1

声明变量,详细代码如下图,具体用途说明都已经有备注。

2

新建渲染器(initRenderer)、相机(initCamera)和场景(initScene),详细代码如下图:  1.渲染器设置抗锯齿为有效(antialias: true),使物体更光滑;  2.渲染背景色设置为0x171413,模拟天气黑暗感觉;  3.PerspectiveCamera的视角一般设置45,效果比较好;  4.为了观察效果,相机的位置定位到(20,40,110),设置y轴向上(camera.up.y = 1),且焦点为(20,30 , 0)。

3

新建物体(initObject),这一块比较复杂,详细分析如下:  1.先新建几何模型(geom)和设置粒子缺省材质属性(material),里面要注意属性sizeAttenuation,设置为true的时候,雨滴会随距离而发生尺寸衰减(远小、近大),其它属性下图都有详细备注;  2.然后把5000个随机顶点位置的数据(particle)保存到数组中(geom.vertices);  3.最后新建类(cloud),里面包含5000个粒子(模型和材质为第1点设置的数据)。  Tips:velocityY和velocityX影响下落的速度。

4

添加动画效果,简单说就是利用requestAnimationFrame每隔一个动画帧重新渲染一次,由于设置了每个顶点位置偏移,所以会产生动画效果;详细代码如下图:  1.设置了每隔一个动画帧重新渲染的时候,改变每个顶点的坐标位置(vertices.forEach),从而产生下落的过程  2.如果单单只设置第1点的动画,雨滴的动画效果会一卡一卡,不够真实;所以利用时间差(Date.now() - startTime > 100)判断,如果达到条件就调用函数initObject,函数里面有判断如果类(cloud)存在,则删除全部雨滴,重新渲染5000个雨滴,使雨滴下落过程更加顺畅。

注意事项
1

three.js版本102;

2

常用的构造器、属性和方法可参考《实例介绍three.js常用的构造器、属性和方法》,这里只分析特殊的代码。

推荐信息