700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > HTML5开发实例-ThreeJs实现粒子动画飘花效果代码分享

HTML5开发实例-ThreeJs实现粒子动画飘花效果代码分享

时间:2022-03-20 14:28:23

相关推荐

HTML5开发实例-ThreeJs实现粒子动画飘花效果代码分享

web前端|H5教程

HTML5,ThreeJs,粒子动画飘花

web前端-H5教程

c进销存源码,关于vscode的问题,ubuntu 隐藏 文件,tomcat并发测试,累死sqlite,网页设计优秀案例,java 数据库对象,网站为什么要服务器,手机开奖插件,前端的框架去哪学比较好,爬虫异形,php抓包,seo发外链工具,go甲壳springboot,正则替换 标签属性,扁平化网站 psd,下载网页中css,织梦 内容模板管理 图片路径,.net开发app后台,爬虫 asp页面,内容管理系统 主要功能,php新闻程序lzw

粒子动画在ThreeJs可以用几种方式实现

本次样例使用Sprite类来构建粒子

熊猫俱乐部源码,嵌入的ubuntu系统,淘宝允许爬虫么,php输出表达式的值使用,seo费用加盟lzw

官方对Sprite类的解释SpriteA sprite is a plane that always faces towards the camera, generally with a partially transparent texture applied.Sprites do not cast shadows, settingcastShadow = truewill have no effect.

大概意思:这个类创建的对象是一个始终面向相机的平面,可以把贴图应用在上面,Sprite对象无法添加阴影 ,所以castShadow属性无效

首先我们创建场景和相机

付费语音问答 源码,平板电脑ubuntu,本地项目起tomcat服务,lua c 爬虫,php 服务器运行时间,长寿区seo网络营销公司lzw

container = document.createElement( p );document.body.appendChild( container );camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 10000 );camera.position.set( 0, 0, 120 );scene = new THREE.Scene();

然后用Sprite创建粒子

var textureList=[pic1,pic2,pic3,pic4,pic5,pic6,pic7,pic8,pic9,pic10]

var textureLoader = new THREE.TextureLoader();var textureId = parseInt(Math.random()*100)%10var texture = textureLoader.load(textureList[textureId]);var particle = new THREE.Sprite( new THREE.SpriteMaterial( { map: texture } ) );

生成随机数,随机获取贴图资源,使用Sprite类创建粒子

particle.position.x = Math.round(Math.random() *winHeight* 1000)%200 +120;particle.position.y =Math.round(Math.random() *winHeight* 10000)%100 +60;particle.position.z = Math.random() * 3 - 30;particle.scale.x = particle.scale.y = Math.round(Math.random() * 50)%5+10 ;

使用随机数给粒子设置位置,大小

因为Sprite类是创建一个始终面向相机的面,也就是说它无法使用翻转使得花瓣有个翻转的效果。

但是我需要给花瓣添加一个翻转的效果

我的实现思路是,2d元素在反转时其实相当于是将他的x轴的大小压缩

所以我给设置一个当前x轴的大小

和初始变形速度

particle.sizeX = particle.scale.x;particle.xScaleSpeed = -0.08;

以下是所有粒子初始化的代码

for ( var i = 0; i < 30; i ++ ) { var textureLoader = new THREE.TextureLoader(); var textureId = parseInt(Math.random()*10); var texture = textureLoader.load(textureList[textureId]); var particle = new THREE.Sprite( new THREE.SpriteMaterial( { map: texture } ) ); particle.position.x = Math.round(Math.random() *winHeight* 1000)%200 +120; particle.position.y =Math.round(Math.random() *winHeight* 10000)%100 +60; particle.position.z = Math.random() * 3 - 30; particle.scale.x = particle.scale.y = Math.round(Math.random() * 50)%5+10 ; particle.sizeX = particle.scale.x; particle.xScaleSpeed = -0.08; particle.speed = Math.round(Math.random()*10)/50; particles.push(particle); scene.add( particle );}

创建完粒子后

创建canvasRender

renderer = new THREE.CanvasRenderer({alpha:true});renderer.setClearColor("#ffffff",0);renderer.setPixelRatio( window.devicePixelRatio );renderer.setSize( window.innerWidth, winHeight );container.appendChild( renderer.domElement );

因为准备让花瓣从左上方往右下飘落,所以每次渲染画面的时候需要将花瓣往右下偏移

particles[i].position.x+=particles[i].speed;

这个速度是我在创建粒子时随机生成的,为的是让花瓣每一片的速度不同

particles[i].position.y-=particles[i].speed+0.1;

给y轴上也在每次渲染的时候增加一个偏移量,

因为这个效果需要在竖屏上展示,

所以y轴速度比x轴快一些效果会更好

particles[i].scale.x += particles[i].xScaleSpeed;

然后对粒子的形状在每次渲染的时候增加一个变形量

if(particles[i].scale.x =particles[i].sizeX){ particles[i].xScaleSpeed = -0.08}

需要模拟花瓣翻转的效果,当当前变形量超过原先尺寸时,变形方向改为相反方向(本来变大改为变小)

if(particles[i].scale.x 0){ particles[i].scale.x=-0.3}if(particles[i].scale.x >-0.3&&particles[i].scale.x <0){ particles[i].scale.x=0.3}

到这里我们就完成了粒子的飘落+翻转的动态。

我们还需要在粒子超出效果展示区域时,把粒子重新赋予一个初始位置

if(particles[i].position.y50|particles[i].position.z>150){ particles[i].position.x = -Math.round(Math.random() *winWidth* 1000)%(winWidth); particles[i].position.y = Math.round(Math.random() *winHeight* 1000)%200 +120 particles[i].position.z = Math.random() * 5 - 30; particles[i].speed=Math.round(Math.random()*10)/30;}

这样,飘花瓣的效果,

就完成了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。