基于Threejs火焰烟雾动画功能代码

利用Threejs进行三维可视化的应用项目开发,我们经常回遇到需要加入一些动画效果,粒子效果等。所以本片利用此详细的例子进行介绍在Threejs中如何使用。

 1,首先需要对三维场景进行初始化

function init() {
				// 创建clock
				clock = new THREE.Clock();
				// 创建场景
				scene=new THREE.Scene();
				// 创建渲染器
				renderer=new THREE.WebGLRenderer({
					antialias:true,
					alpha:true
				});
				renderer.setClearColor(0x000000, 0.0);
				renderer.setSize(window.innerWidth,window.innerHeight);
				renderer.setPixelRatio(window.devicePixelRatio);
				document.body.appendChild(renderer.domElement);
				// 创建透视相机
				camera=new THREE.PerspectiveCamera(60,window.innerWidth/window.innerHeight,1,1000);
				camera.position.set(0,0,30);
				
				// 辅助移动视角
				// controls=new THREE.OrbitControls(camera,renderer.domElement);
				// controls.enableDamping=true;
				// controls.minDistance=1;
				// controls.maxDistance=500;
				
				scene.add(new THREE.AmbientLight(0XCCCCCC, 0.5));
				
				var pointLight=new THREE.PointLight(0xffffff, 0.8);
				pointLight.position.set(0, 10, 40);
				scene.add(pointLight);
			}

2,对场景中用到的模型进行初始化

function initModel(){
				// var helper = new THREE.GridHelper(1000, 50);
				// scene.add(helper);
				
				// 尾焰
				var plane=new THREE.PlaneBufferGeometry(15,30,1);
				fire = new THREE.Fire(plane,{
					textureWidth:1024,
					textureHeight:1024,
					debug:false,
					color1: new THREE.Color(0xffffff),
					color2: new THREE.Color(0xffc159),
					color3: new THREE.Color(0xe69bb1),
					windVector: new THREE.Vector2(0, -1.2),
					colorBias: 0.92,
					burnRate: 1.19,
					diffuse: 5,
					viscosity: 0.2,
					expansion: -3,
					swirl: 8,
					drag: 0.17,
					airSpeed: 23,
					speed: 390,
					massConservation: false
				});

				fire.addSource(0.5, 0.6, 0.1, 1.0, 0.0, -2.0);
				fire.addSource(0.62, 0.6, 0.1, 1.0, 0.0, -2.0);
				fire.addSource(0.38, 0.6, 0.1, 1.0, 0.0, -2.0);
				fire.position.y = firePosition;
				fire.position.z = -10;
				// fire.rotateX(Math.PI);//绕x轴旋转π/4
				scene.add(fire);
			
				// 烟雾
				var smokeTexture = THREE.ImageUtils.loadTexture(smokePath);
				var smokeMaterial = new THREE.MeshLambertMaterial({
					map: smokeTexture,
					transparent: true
				});
				var smokeGeo = new THREE.PlaneGeometry(30, 30);
				for (p = 0; p < smokeCount; p++) {
					var particle = new THREE.Mesh(smokeGeo, smokeMaterial);
					// particle.position.set((p-10)*5, -28+Math.abs(p-10)*2, -5);
					particle.position.set(0, firePosition-8, -5);
					// particle.position.set((p-10)*5, -28+Math.abs(p-10)*3, -5);
					particle.rotation.z = Math.random() * 360;
					// particle.rotateX(Math.PI);//绕x轴旋转π/4
					scene.add(particle);
					smokeParticles.push(particle);
				}
				
				// 箭体
				var arrowPlane=new THREE.PlaneBufferGeometry(10,25,1);
				// var geometry = new THREE.CubeGeometry( 10, 10, 10);
				var material = new THREE.MeshPhongMaterial({
					map: THREE.ImageUtils.loadTexture(arrowPath),
					transparent: true
					});
				arrowBodyMesh = new THREE.Mesh(arrowPlane, material);
				arrowBodyMesh.position.y = (firePosition + 18.7);
				arrowBodyMesh.position.z = -10;
				scene.add(arrowBodyMesh);
			}

3,动画创建

             /**
			 * three.js动画准备
			 */
			function threeReady(){
				init();
				initModel();
			}
			
			/**
			 * three.js动画开始
			 */
			function threeStart() {
				// 允许动画循环
				isStop = false;
				initTween();
				animate();
			}

            /**
			 * 元素归位,动画循环停止
			 */
			var isStop = false; // 是否停止动画nd
			function threeEnd() {
				// 尾焰归位
				fire.position.set(0, firePosition, -10);
				// 烟雾归位
				for (var p = 0; p < smokeCount; p++) {
					smokeParticles[p].position.set(0, firePosition-8, -5);
				}
				// 箭体归位
				arrowBodyMesh.position.set(0, firePosition + 18.7, -10);
				// 动画循环停止
				isStop = true;
			}

完整源码下载地址:基于Threejs的火焰烟雾动画效果代码-互联网文档类资源-CSDN下载

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
three.js是一种用于在网页上创建3D图形的JavaScript库。它为开发人员提供了丰富的工具和功能,使他们能够创建逼真的3D场景和效果。而火焰烟雾是three.js中常见的特效之一。 在three.js中,我们可以使用ShaderMaterial来创建火焰烟雾效果。ShaderMaterial是一种自定义材质,可以根据需求编写着色器代码来控制物体的外观和动画。 对于火焰效果,我们可以使用顶点和片元着色器来模拟火焰的动态效果。通过在顶点着色器中根据时间和噪声生成火焰的形状,并在片元着色器中根据距离摄像机的远近和透明度来控制火焰的渲染效果,可以创建出逼真的火焰效果。 而对于烟雾效果,我们可以使用类似的方法。通过在顶点着色器和片元着色器中对顶点位置和颜色进行变换和计算,以及使用一些纹理贴图来模拟烟雾的形状和颜色,可以实现逼真的烟雾效果。 不仅如此,three.js还提供了一些内置的功能和库来帮助我们创建更加复杂的火焰烟雾效果。例如,我们可以使用THREE.Fire类来创建火焰,并通过调整其参数来控制火焰的大小、颜色和动画效果。同样地,我们可以使用THREE.Smoke类来创建烟雾,并通过调整其参数来控制烟雾的密度、展示范围和透明度等。 总之,通过使用three.js的功能和工具,我们可以轻松地创建出逼真的火焰烟雾效果,为网页中的3D场景增添动态和真实感。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珞珈鸡丝

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值