SuperMap iClient3D for WebGL教程(粒子效果)-烟花效果

本文详细介绍了如何使用Cesium在WebGL中实现烟花效果,包括调整泛光参数、修改粒子系统参数以及创建烟花粒子对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WuYK

前段时间有人问我,WebGL烟花效果怎么做,在我们官网或者本地范例包中,确实是没有烟花爆炸的一个效果,在Cesium官网上是有这个DEMO的,于是把代码搬过来,发现效果不是特别好,于是在此基础上修改了一些参数,再结合泛光效果,制作成了符合WebGL的"烟花效果"。

先直接看效果吧在这里插入图片描述

以下是实现方法

一.泛光后期处理

开启抗锯齿,泛光,泛光强度,hdr等参数,此处为了显示效果好一点我直接把球面给隐藏了,并且设置了泛光颜色为蓝色。
                var scene = viewer.scene;
				var camera = scene.camera;
				viewer.scene.fxaa = true;
				viewer.scene.bloomEffect.show = true;
				viewer.scene.bloomEffect._bloomColor = Cesium.Color.BLUE;
				viewer.scene.bloomEffect.bloomIntensity = 30;
				viewer.scene.bloomEffect.threshold = 0.01;
				scene.hdrEnabled = true;
				viewer.scene.globe.show = false;				

二.烟花粒子对象

在Cesium官方Demo上,我把参数进行了修改,修改了爆炸的范围参数,重力参数,粒子发射器的一些核心参数和粒子范围。以下是我修改后的代码。
                var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(116.381828897766, 39.981967807373));
				var emitterInitialLocation = new Cesium.Cartesian3(0.0, 0.0, 100.0);
				var particleCanvas;
				function getImage() {
					if(!Cesium.defined(particleCanvas)) {
						particleCanvas = document.createElement('canvas');
						particleCanvas.width = 20;
						particleCanvas.height = 20;
						var context2D = particleCanvas.getContext('2d');
						context2D.beginPath();
						context2D.arc(8, 8, 8, 0, Cesium.Math.TWO_PI, true);
						context2D.closePath();
						context2D.fillStyle = 'rgb(255, 255, 255)';
						context2D.fill();
					}
					return particleCanvas;
				}
				var particlePixelSize = new Cesium.Cartesian2(1.5, 1.5);
				var burstSize = 400.0;
				var lifetime = 12.0;
				var numberOfFireworks = 15.0;
				var emitterModelMatrixScratch = new Cesium.Matrix4();
				function createFirework(offset, color, bursts) {
					var position = Cesium.Cartesian3.add(emitterInitialLocation, offset, new Cesium.Cartesian3());
					var emitterModelMatrix = Cesium.Matrix4.fromTranslation(position, emitterModelMatrixScratch);

					function applyGravity(particle, dt) {
						var position = particle.position;
						var gravityVector = Cesium.Cartesian3.normalize(position, new Cesium.Cartesian3());
						Cesium.Cartesian3.multiplyByScalar(gravityVector, 1 * dt, gravityVector);
						particle.velocity = Cesium.Cartesian3.add(particle.velocity, gravityVector, particle.velocity);
					}
					scene.primitives.add(new Cesium.ParticleSystem({
						image: getImage(),
						startColor: color,
						endColor: color.withAlpha(0.0),
						particleLife: 0.5,
						speed: 150.0,
						imageSize: particlePixelSize,
						emissionRate: 0,
						emitter: new Cesium.SphereEmitter(1.5),
						bursts: bursts,
						lifetime: lifetime,
						updateCallback: applyGravity,
						modelMatrix: modelMatrix,
						emitterModelMatrix: emitterModelMatrix
					}));
				}
				var xMin = -150.0;
				var xMax = 150.0;
				var yMin = -150.0;
				var yMax = 150.0;
				var zMin = -50.0;
				var zMax = 150.0;  
				var colorOptions = [{
					minimumRed: 0.75,
					green: 0.0,
					minimumBlue: 0.8,
					alpha: 1.0
				}, {
					red: 0.0,
					minimumGreen: 0.75,
					minimumBlue: 0.8,
					alpha: 1.0
				}, {
					red: 0.0,
					green: 0.0,
					minimumBlue: 0.8,
					alpha: 1.0
				}, {
					minimumRed: 0.75,
					minimumGreen: 0.75,
					blue: 0.0,
					alpha: 1.0
				}];

				for(var i = 0; i < numberOfFireworks; ++i) {
					var x = Cesium.Math.randomBetween(xMin, xMax);
					var y = Cesium.Math.randomBetween(yMin, yMax);
					var z = Cesium.Math.randomBetween(zMin, zMax);
					var offset = new Cesium.Cartesian3(x, y, z);
					var color = Cesium.Color.fromRandom(colorOptions[i % colorOptions.length]);

					var bursts = [];
					for(var j = 0; j < 3; ++j) {
						bursts.push(new Cesium.ParticleBurst({
							time: Cesium.Math.nextRandomNumber() * lifetime,
							minimum: burstSize,
							maximum: burstSize
						}));
					}
					createFirework(offset, color, bursts);
				}				

以上就是关于烟花粒子效果的全部代码了,有兴趣的小伙伴还可以自己再修改一些参数或者一些场景后期,让效果更加的出色。

### 回答1: SuperMap iClient 3D for WebGL 是一款基于 WebGL 技术的三维地图开发工具,主要用于构建具有三维效果的地图应用程序。该工具提供了丰富的 API 接口和示例代码,可以帮助开发者快速上手,实现各种三维地图功能,如地形展示、建筑物模型、动态效果等。同时,SuperMap iClient 3D for WebGL 还支持多种数据格式,包括 SuperMap iServer 数据、OGC 标准数据、KML、GeoJSON 等,可以满足不同应用场景的需求。 ### 回答2: SuperMap iClient3D for WebGL是一个基于WebGL技术的三维地图开发框架。它提供了一系列的API和工具,使开发人员能够更加轻松地构建出高质量的三维地图应用。下面,我将从以下几个方面介绍SuperMap iClient3D for WebGL教程。 一、环境配置 SuperMap iClient3D for WebGL的开发需要先配置开发环境,包括安装Node.js、下载安装SuperMap iServer、下载安装SuperMap iClient3D资源包、创建Web应用程序。 二、基本概念 在学习SuperMap iClient3D for WebGL之前,需要了解一些基本概念。这些概念包括:场景(Scene)、层(Layer)、覆盖物(Overlay)等。在使用SuperMap iClient3D for WebGL时需要理解这些概念。 三、API使用 SuperMap iClient3D for WebGL提供了众多的API,使用这些API能够快速构建出一个三维地图应用。这些API包括:场景相关的API,如创建场景、设置场景属性等;层相关的API,如加载图层数据、隐藏、显示图层等;覆盖物相关的API,如创建点、线、面等覆盖物。 四、进阶应用 在掌握SuperMap iClient3D for WebGL的基础之后,可以通过进阶应用来进一步加深对这个框架的理解。进阶应用包括地球的三维测量、地球的动态效果、地球的热点区域等。 总之,SuperMap iClient3D for WebGL是一个非常实用的三维地图开发框架。通过学习其教程,开发人员可以更加方便、快速地构建出高质量的三维地图应用。 ### 回答3: SuperMap iClient 3D for WebGL是一款基于WebGL技术的开源GIS JavaScript库,用于构建高效、功能强大的3D GIS应用程序。这个库支持在Web浏览器里实现高质量的三维可视化效果,包括三维地形、建筑物、模型、标签等。现在,我来为你们讲解一下关于SuperMap iClient 3D for WebGL教程。 一、前置知识 在接触SuperMap iClient 3D for WebGL之前,建议你先学习基本的WebGL知识和JavaScript语言,也应该具备计算机图形学基础和3D模型制作知识。 二、环境配置 在使用SuperMap iClient 3D for WebGL前,我们需要进行环境配置,在编写和运行项目时可以根据需要安装一系列依赖项,例如Node.js、npm包管理器、Gulp自动化工具、webpack工具和TypeScript编译器等。 三、基本使用 SuperMap iClient 3D for WebGL提供了丰富的API以实现3D可视化应用程序的开发,其中包括地图、图层、标注、工具、渲染等方面。同时,它还提供了多种数据格式的支持,如XYZ、OGC、JSON、KML、GML等。此外,SuperMap iClient 3D for WebGL还支持多种操作和交互方式,如平移、旋转、缩放、选取、编辑等,让用户可以更加自由地探索和编辑地图数据。 四、示例应用 SuperMap iClient 3D for WebGL提供了一系列的示例应用程序,可以帮助用户更好的理解其使用方法和特点,其中包括一些经典的三维场景展示和实时数据可视化等。例如,用户可以体验到城市三维建模、天气预报、热力图、空气质量监控等实用的功能。此外,SuperMap iClient 3D for WebGL也提供了一些模板和组件,供用户快速搭建自己的3D GIS应用程序。 总之,SuperMap iClient 3D for WebGL是一款非常优秀的基于WebGL技术的GIS JavaScript库,具有开源、高效、功能强大、易用等特点,可以为用户提供丰富多彩的三维GIS应用程序。当然,在使用前,建议用户先了解基本的WebGL和JavaScript知识,同时还需配置好开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值