UNPKG

vue-cesium

Version:
1 lines 17.8 kB
{"version":3,"file":"particlesComputing.mjs","sources":["../../../../../../packages/components/overlays/wind/particlesComputing.ts"],"sourcesContent":["import * as Util from './util'\nimport calculateSpeedFrag from './glsl/calculateSpeed.frag'\nimport updatePositionFrag from './glsl/updatePosition.frag'\nimport postProcessingPositionFrag from './glsl/postProcessingPosition.frag'\nimport CustomPrimitive from './customPrimitive'\n\nclass ParticlesComputing {\n windTextures: any\n particlesTextures: any\n primitives: any\n data: any\n\n constructor(context, data, particleSystemOptions, viewerParameters) {\n this.data = data\n this.createWindTextures(context, data)\n this.createParticlesTextures(context, particleSystemOptions, viewerParameters)\n this.createComputingPrimitives(data, particleSystemOptions, viewerParameters, context)\n }\n\n createWindTextures(context, data) {\n const windTextureOptions = {\n context: context,\n width: data.dimensions.lon,\n height: data.dimensions.lat * data.dimensions.lev,\n pixelFormat: !context?.webgl2 ? Cesium.PixelFormat.LUMINANCE : Cesium.PixelFormat.RED,\n pixelDatatype: Cesium.PixelDatatype.FLOAT,\n flipY: false,\n sampler: new Cesium.Sampler({\n // the values of texture will not be interpolated\n minificationFilter: Cesium.TextureMinificationFilter.NEAREST,\n magnificationFilter: Cesium.TextureMagnificationFilter.NEAREST\n })\n }\n\n this.windTextures = {\n U: Util.createTexture(windTextureOptions, data.U.array),\n V: Util.createTexture(windTextureOptions, data.V.array)\n }\n }\n\n createParticlesTextures(context, particleSystemOptions, viewerParameters) {\n const particlesTextureOptions = {\n context: context,\n width: particleSystemOptions.particlesTextureSize,\n height: particleSystemOptions.particlesTextureSize,\n pixelFormat: Cesium.PixelFormat.RGBA,\n pixelDatatype: Cesium.PixelDatatype.FLOAT,\n flipY: false,\n sampler: new Cesium.Sampler({\n // the values of texture will not be interpolated\n minificationFilter: Cesium.TextureMinificationFilter.NEAREST,\n magnificationFilter: Cesium.TextureMagnificationFilter.NEAREST\n })\n }\n\n const particlesArray = this.randomizeParticles(particleSystemOptions.maxParticles, viewerParameters)\n const zeroArray = new Float32Array(4 * particleSystemOptions.maxParticles).fill(0)\n\n this.particlesTextures = {\n previousParticlesPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n currentParticlesPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n nextParticlesPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n postProcessingPosition: Util.createTexture(particlesTextureOptions, particlesArray),\n\n particlesSpeed: Util.createTexture(particlesTextureOptions, zeroArray)\n }\n }\n\n randomizeParticles(maxParticles, viewerParameters) {\n const array = new Float32Array(4 * maxParticles)\n for (let i = 0; i < maxParticles; i++) {\n array[4 * i] = Cesium.Math.randomBetween(viewerParameters.lonRange.x, viewerParameters.lonRange.y)\n array[4 * i + 1] = Cesium.Math.randomBetween(viewerParameters.latRange.x, viewerParameters.latRange.y)\n array[4 * i + 2] = Cesium.Math.randomBetween(this.data.lev.min, this.data.lev.max)\n array[4 * i + 3] = 0.0\n }\n return array\n }\n\n destroyParticlesTextures() {\n Object.keys(this.particlesTextures).forEach(key => {\n this.particlesTextures[key].destroy()\n })\n }\n\n createComputingPrimitives(data, particleSystemOptions, viewerParameters, context) {\n const webgl2 = context?.webgl2\n\n let calculateSpeedFragText = calculateSpeedFrag\n if (!webgl2) {\n calculateSpeedFragText = calculateSpeedFragText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n calculateSpeedFragText = calculateSpeedFragText.replace(/texture\\(/g, 'texture2D(')\n calculateSpeedFragText = calculateSpeedFragText.replace(/out_FragColor/g, 'gl_FragColor')\n }\n\n let updatePositionFragText = updatePositionFrag\n if (!webgl2) {\n updatePositionFragText = updatePositionFragText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n updatePositionFragText = updatePositionFragText.replace(/texture\\(/g, 'texture2D(')\n updatePositionFragText = updatePositionFragText.replace(/out_FragColor/g, 'gl_FragColor')\n }\n\n let postProcessingPositionFragText = postProcessingPositionFrag\n if (!webgl2) {\n postProcessingPositionFragText = postProcessingPositionFragText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n postProcessingPositionFragText = postProcessingPositionFragText.replace(/texture\\(/g, 'texture2D(')\n postProcessingPositionFragText = postProcessingPositionFragText.replace(/out_FragColor/g, 'gl_FragColor')\n }\n\n const dimension = new Cesium.Cartesian3(data.dimensions.lon, data.dimensions.lat, data.dimensions.lev)\n const minimum = new Cesium.Cartesian3(data.lon.min, data.lat.min, data.lev.min)\n const maximum = new Cesium.Cartesian3(data.lon.max, data.lat.max, data.lev.max)\n const interval = new Cesium.Cartesian3(\n (maximum.x - minimum.x) / (dimension.x - 1),\n (maximum.y - minimum.y) / (dimension.y - 1),\n dimension.z > 1 ? (maximum.z - minimum.z) / (dimension.z - 1) : 1.0\n )\n const uSpeedRange = new Cesium.Cartesian2(data.U.min, data.U.max)\n const vSpeedRange = new Cesium.Cartesian2(data.V.min, data.V.max)\n\n const that = this\n\n this.primitives = {\n calculateSpeed: new CustomPrimitive({\n commandType: 'Compute',\n uniformMap: {\n U: function () {\n return that.windTextures.U\n },\n V: function () {\n return that.windTextures.V\n },\n currentParticlesPosition: function () {\n return that.particlesTextures.currentParticlesPosition\n },\n dimension: function () {\n return dimension\n },\n minimum: function () {\n return minimum\n },\n maximum: function () {\n return maximum\n },\n interval: function () {\n return interval\n },\n uSpeedRange: function () {\n return uSpeedRange\n },\n vSpeedRange: function () {\n return vSpeedRange\n },\n pixelSize: function () {\n return viewerParameters.pixelSize\n },\n speedFactor: function () {\n return particleSystemOptions.speedFactor\n }\n },\n fragmentShaderSource: new Cesium.ShaderSource({\n sources: [calculateSpeedFragText]\n }),\n outputTexture: this.particlesTextures.particlesSpeed,\n preExecute: function () {\n // swap textures before binding\n const temp = that.particlesTextures.previousParticlesPosition\n that.particlesTextures.previousParticlesPosition = that.particlesTextures.currentParticlesPosition\n that.particlesTextures.currentParticlesPosition = that.particlesTextures.postProcessingPosition\n that.particlesTextures.postProcessingPosition = temp\n\n // keep the outputTexture up to date\n that.primitives.calculateSpeed.commandToExecute.outputTexture = that.particlesTextures.particlesSpeed\n }\n }),\n\n updatePosition: new CustomPrimitive({\n commandType: 'Compute',\n uniformMap: {\n currentParticlesPosition: function () {\n return that.particlesTextures.currentParticlesPosition\n },\n particlesSpeed: function () {\n return that.particlesTextures.particlesSpeed\n }\n },\n fragmentShaderSource: new Cesium.ShaderSource({\n sources: [updatePositionFragText]\n }),\n outputTexture: this.particlesTextures.nextParticlesPosition,\n preExecute: function () {\n // keep the outputTexture up to date\n that.primitives.updatePosition.commandToExecute.outputTexture = that.particlesTextures.nextParticlesPosition\n }\n }),\n\n postProcessingPosition: new CustomPrimitive({\n commandType: 'Compute',\n uniformMap: {\n nextParticlesPosition: function () {\n return that.particlesTextures.nextParticlesPosition\n },\n particlesSpeed: function () {\n return that.particlesTextures.particlesSpeed\n },\n lonRange: function () {\n return viewerParameters.lonRange\n },\n latRange: function () {\n return viewerParameters.latRange\n },\n randomCoefficient: function () {\n const randomCoefficient = Math.random()\n return randomCoefficient\n },\n dropRate: function () {\n return particleSystemOptions.dropRate\n },\n dropRateBump: function () {\n return particleSystemOptions.dropRateBump\n }\n },\n fragmentShaderSource: new Cesium.ShaderSource({\n sources: [postProcessingPositionFragText]\n }),\n outputTexture: this.particlesTextures.postProcessingPosition,\n preExecute: function () {\n // keep the outputTexture up to date\n that.primitives.postProcessingPosition.commandToExecute.outputTexture = that.particlesTextures.postProcessingPosition\n }\n })\n }\n }\n}\nexport default ParticlesComputing\n"],"names":["Util.createTexture","updatePositionFrag","postProcessingPositionFrag"],"mappings":"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"}