323ab4e3e0f6a8cf11c9ce6ea30444df716a3757cad777fbbf7082d4820b2516.json 29 KB

1
  1. {"ast":null,"code":"import { DeepCopier } from \"../../Misc/deepCopier.js\";\nimport { Vector3, TmpVectors } from \"../../Maths/math.vector.js\";\nimport { RandomRange } from \"../../Maths/math.scalar.functions.js\";\n/**\n * Particle emitter emitting particles from the inside of a cone.\n * It emits the particles alongside the cone volume from the base to the particle.\n * The emission direction might be randomized.\n */\nexport class ConeParticleEmitter {\n /**\n * Gets or sets the radius of the emission cone\n */\n get radius() {\n return this._radius;\n }\n set radius(value) {\n this._radius = value;\n this._buildHeight();\n }\n /**\n * Gets or sets the angle of the emission cone\n */\n get angle() {\n return this._angle;\n }\n set angle(value) {\n this._angle = value;\n this._buildHeight();\n }\n _buildHeight() {\n if (this._angle !== 0) {\n this._height = this._radius / Math.tan(this._angle / 2);\n } else {\n this._height = 1;\n }\n }\n /**\n * Creates a new instance ConeParticleEmitter\n * @param radius the radius of the emission cone (1 by default)\n * @param angle the cone base angle (PI by default)\n * @param directionRandomizer defines how much to randomize the particle direction [0-1] (default is 0)\n */\n constructor(radius = 1, angle = Math.PI, /** [0] defines how much to randomize the particle direction [0-1] (default is 0) */\n directionRandomizer = 0) {\n this.directionRandomizer = directionRandomizer;\n /**\n * Gets or sets a value indicating where on the radius the start position should be picked (1 = everywhere, 0 = only surface)\n */\n this.radiusRange = 1;\n /**\n * Gets or sets a value indicating where on the height the start position should be picked (1 = everywhere, 0 = only surface)\n */\n this.heightRange = 1;\n /**\n * Gets or sets a value indicating if all the particles should be emitted from the spawn point only (the base of the cone)\n */\n this.emitFromSpawnPointOnly = false;\n this.angle = angle;\n this.radius = radius;\n }\n /**\n * Called by the particle System when the direction is computed for the created particle.\n * @param worldMatrix is the world matrix of the particle system\n * @param directionToUpdate is the direction vector to update with the result\n * @param particle is the particle we are computed the direction for\n * @param isLocal defines if the direction should be set in local space\n */\n startDirectionFunction(worldMatrix, directionToUpdate, particle, isLocal) {\n if (isLocal) {\n TmpVectors.Vector3[0].copyFrom(particle._localPosition).normalize();\n } else {\n particle.position.subtractToRef(worldMatrix.getTranslation(), TmpVectors.Vector3[0]).normalize();\n }\n const randX = RandomRange(0, this.directionRandomizer);\n const randY = RandomRange(0, this.directionRandomizer);\n const randZ = RandomRange(0, this.directionRandomizer);\n directionToUpdate.x = TmpVectors.Vector3[0].x + randX;\n directionToUpdate.y = TmpVectors.Vector3[0].y + randY;\n directionToUpdate.z = TmpVectors.Vector3[0].z + randZ;\n directionToUpdate.normalize();\n }\n /**\n * Called by the particle System when the position is computed for the created particle.\n * @param worldMatrix is the world matrix of the particle system\n * @param positionToUpdate is the position vector to update with the result\n * @param particle is the particle we are computed the position for\n * @param isLocal defines if the position should be set in local space\n */\n startPositionFunction(worldMatrix, positionToUpdate, particle, isLocal) {\n const s = RandomRange(0, Math.PI * 2);\n let h;\n if (!this.emitFromSpawnPointOnly) {\n h = RandomRange(0, this.heightRange);\n // Better distribution in a cone at normal angles.\n h = 1 - h * h;\n } else {\n h = 0.0001;\n }\n let radius = this._radius - RandomRange(0, this._radius * this.radiusRange);\n radius = radius * h;\n const randX = radius * Math.sin(s);\n const randZ = radius * Math.cos(s);\n const randY = h * this._height;\n if (isLocal) {\n positionToUpdate.x = randX;\n positionToUpdate.y = randY;\n positionToUpdate.z = randZ;\n return;\n }\n Vector3.TransformCoordinatesFromFloatsToRef(randX, randY, randZ, worldMatrix, positionToUpdate);\n }\n /**\n * Clones the current emitter and returns a copy of it\n * @returns the new emitter\n */\n clone() {\n const newOne = new ConeParticleEmitter(this._radius, this._angle, this.directionRandomizer);\n DeepCopier.DeepCopy(this, newOne);\n return newOne;\n }\n /**\n * Called by the GPUParticleSystem to setup the update shader\n * @param uboOrEffect defines the update shader\n */\n applyToShader(uboOrEffect) {\n uboOrEffect.setFloat2(\"radius\", this._radius, this.radiusRange);\n uboOrEffect.setFloat(\"coneAngle\", this._angle);\n uboOrEffect.setFloat2(\"height\", this._height, this.heightRange);\n uboOrEffect.setFloat(\"directionRandomizer\", this.directionRandomizer);\n }\n /**\n * Creates the structure of the ubo for this particle emitter\n * @param ubo ubo to create the structure for\n */\n buildUniformLayout(ubo) {\n ubo.addUniform(\"radius\", 2);\n ubo.addUniform(\"coneAngle\", 1);\n ubo.addUniform(\"height\", 2);\n ubo.addUniform(\"directionRandomizer\", 1);\n }\n /**\n * Returns a string to use to update the GPU particles update shader\n * @returns a string containing the defines string\n */\n getEffectDefines() {\n let defines = \"#define CONEEMITTER\";\n if (this.emitFromSpawnPointOnly) {\n defines += \"\\n#define CONEEMITTERSPAWNPOINT\";\n }\n return defines;\n }\n /**\n * Returns the string \"ConeParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"ConeParticleEmitter\";\n }\n /**\n * Serializes the particle system to a JSON object.\n * @returns the JSON object\n */\n serialize() {\n const serializationObject = {};\n serializationObject.type = this.getClassName();\n serializationObject.radius = this._radius;\n serializationObject.angle = this._angle;\n serializationObject.directionRandomizer = this.directionRandomizer;\n serializationObject.radiusRange = this.radiusRange;\n serializationObject.heightRange = this.heightRange;\n serializationObject.emitFromSpawnPointOnly = this.emitFromSpawnPointOnly;\n return serializationObject;\n }\n /**\n * Parse properties from a JSON object\n * @param serializationObject defines the JSON object\n */\n parse(serializationObject) {\n this.radius = serializationObject.radius;\n this.angle = serializationObject.angle;\n this.directionRandomizer = serializationObject.directionRandomizer;\n this.radiusRange = serializationObject.radiusRange !== undefined ? serializationObject.radiusRange : 1;\n this.heightRange = serializationObject.radiusRange !== undefined ? serializationObject.heightRange : 1;\n this.emitFromSpawnPointOnly = serializationObject.emitFromSpawnPointOnly !== undefined ? serializationObject.emitFromSpawnPointOnly : false;\n }\n}\nexport class ConeDirectedParticleEmitter extends ConeParticleEmitter {\n constructor(radius = 1, angle = Math.PI,\n /**\n * [Up vector] The min limit of the emission direction.\n */\n direction1 = new Vector3(0, 1, 0),\n /**\n * [Up vector] The max limit of the emission direction.\n */\n direction2 = new Vector3(0, 1, 0)) {\n super(radius, angle);\n this.direction1 = direction1;\n this.direction2 = direction2;\n }\n /**\n * Called by the particle System when the direction is computed for the created particle.\n * @param worldMatrix is the world matrix of the particle system\n * @param directionToUpdate is the direction vector to update with the result\n */\n startDirectionFunction(worldMatrix, directionToUpdate) {\n const randX = RandomRange(this.direction1.x, this.direction2.x);\n const randY = RandomRange(this.direction1.y, this.direction2.y);\n const randZ = RandomRange(this.direction1.z, this.direction2.z);\n Vector3.TransformNormalFromFloatsToRef(randX, randY, randZ, worldMatrix, directionToUpdate);\n }\n /**\n * Clones the current emitter and returns a copy of it\n * @returns the new emitter\n */\n clone() {\n const newOne = new ConeDirectedParticleEmitter(this.radius, this.angle, this.direction1, this.direction2);\n DeepCopier.DeepCopy(this, newOne);\n return newOne;\n }\n /**\n * Called by the GPUParticleSystem to setup the update shader\n * @param uboOrEffect defines the update shader\n */\n applyToShader(uboOrEffect) {\n uboOrEffect.setFloat(\"radius\", this.radius);\n uboOrEffect.setFloat(\"radiusRange\", this.radiusRange);\n uboOrEffect.setVector3(\"direction1\", this.direction1);\n uboOrEffect.setVector3(\"direction2\", this.direction2);\n }\n /**\n * Creates the structure of the ubo for this particle emitter\n * @param ubo ubo to create the structure for\n */\n buildUniformLayout(ubo) {\n ubo.addUniform(\"radius\", 1);\n ubo.addUniform(\"radiusRange\", 1);\n ubo.addUniform(\"direction1\", 3);\n ubo.addUniform(\"direction2\", 3);\n }\n /**\n * Returns a string to use to update the GPU particles update shader\n * @returns a string containing the defines string\n */\n getEffectDefines() {\n return \"#define CONEEMITTER\\n#define DIRECTEDCONEEMITTER\";\n }\n /**\n * Returns the string \"ConeDirectedParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"ConeDirectedParticleEmitter\";\n }\n /**\n * Serializes the particle system to a JSON object.\n * @returns the JSON object\n */\n serialize() {\n const serializationObject = super.serialize();\n serializationObject.direction1 = this.direction1.asArray();\n serializationObject.direction2 = this.direction2.asArray();\n return serializationObject;\n }\n /**\n * Parse properties from a JSON object\n * @param serializationObject defines the JSON object\n */\n parse(serializationObject) {\n super.parse(serializationObject);\n this.direction1.copyFrom(serializationObject.direction1);\n this.direction2.copyFrom(serializationObject.direction2);\n }\n}","map":{"version":3,"names":["DeepCopier","Vector3","TmpVectors","RandomRange","ConeParticleEmitter","radius","_radius","value","_buildHeight","angle","_angle","_height","Math","tan","constructor","PI","directionRandomizer","radiusRange","heightRange","emitFromSpawnPointOnly","startDirectionFunction","worldMatrix","directionToUpdate","particle","isLocal","copyFrom","_localPosition","normalize","position","subtractToRef","getTranslation","randX","randY","randZ","x","y","z","startPositionFunction","positionToUpdate","s","h","sin","cos","TransformCoordinatesFromFloatsToRef","clone","newOne","DeepCopy","applyToShader","uboOrEffect","setFloat2","setFloat","buildUniformLayout","ubo","addUniform","getEffectDefines","defines","getClassName","serialize","serializationObject","type","parse","undefined","ConeDirectedParticleEmitter","direction1","direction2","TransformNormalFromFloatsToRef","setVector3","asArray"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Particles/EmitterTypes/coneParticleEmitter.js"],"sourcesContent":["import { DeepCopier } from \"../../Misc/deepCopier.js\";\nimport { Vector3, TmpVectors } from \"../../Maths/math.vector.js\";\nimport { RandomRange } from \"../../Maths/math.scalar.functions.js\";\n/**\n * Particle emitter emitting particles from the inside of a cone.\n * It emits the particles alongside the cone volume from the base to the particle.\n * The emission direction might be randomized.\n */\nexport class ConeParticleEmitter {\n /**\n * Gets or sets the radius of the emission cone\n */\n get radius() {\n return this._radius;\n }\n set radius(value) {\n this._radius = value;\n this._buildHeight();\n }\n /**\n * Gets or sets the angle of the emission cone\n */\n get angle() {\n return this._angle;\n }\n set angle(value) {\n this._angle = value;\n this._buildHeight();\n }\n _buildHeight() {\n if (this._angle !== 0) {\n this._height = this._radius / Math.tan(this._angle / 2);\n }\n else {\n this._height = 1;\n }\n }\n /**\n * Creates a new instance ConeParticleEmitter\n * @param radius the radius of the emission cone (1 by default)\n * @param angle the cone base angle (PI by default)\n * @param directionRandomizer defines how much to randomize the particle direction [0-1] (default is 0)\n */\n constructor(radius = 1, angle = Math.PI, \n /** [0] defines how much to randomize the particle direction [0-1] (default is 0) */\n directionRandomizer = 0) {\n this.directionRandomizer = directionRandomizer;\n /**\n * Gets or sets a value indicating where on the radius the start position should be picked (1 = everywhere, 0 = only surface)\n */\n this.radiusRange = 1;\n /**\n * Gets or sets a value indicating where on the height the start position should be picked (1 = everywhere, 0 = only surface)\n */\n this.heightRange = 1;\n /**\n * Gets or sets a value indicating if all the particles should be emitted from the spawn point only (the base of the cone)\n */\n this.emitFromSpawnPointOnly = false;\n this.angle = angle;\n this.radius = radius;\n }\n /**\n * Called by the particle System when the direction is computed for the created particle.\n * @param worldMatrix is the world matrix of the particle system\n * @param directionToUpdate is the direction vector to update with the result\n * @param particle is the particle we are computed the direction for\n * @param isLocal defines if the direction should be set in local space\n */\n startDirectionFunction(worldMatrix, directionToUpdate, particle, isLocal) {\n if (isLocal) {\n TmpVectors.Vector3[0].copyFrom(particle._localPosition).normalize();\n }\n else {\n particle.position.subtractToRef(worldMatrix.getTranslation(), TmpVectors.Vector3[0]).normalize();\n }\n const randX = RandomRange(0, this.directionRandomizer);\n const randY = RandomRange(0, this.directionRandomizer);\n const randZ = RandomRange(0, this.directionRandomizer);\n directionToUpdate.x = TmpVectors.Vector3[0].x + randX;\n directionToUpdate.y = TmpVectors.Vector3[0].y + randY;\n directionToUpdate.z = TmpVectors.Vector3[0].z + randZ;\n directionToUpdate.normalize();\n }\n /**\n * Called by the particle System when the position is computed for the created particle.\n * @param worldMatrix is the world matrix of the particle system\n * @param positionToUpdate is the position vector to update with the result\n * @param particle is the particle we are computed the position for\n * @param isLocal defines if the position should be set in local space\n */\n startPositionFunction(worldMatrix, positionToUpdate, particle, isLocal) {\n const s = RandomRange(0, Math.PI * 2);\n let h;\n if (!this.emitFromSpawnPointOnly) {\n h = RandomRange(0, this.heightRange);\n // Better distribution in a cone at normal angles.\n h = 1 - h * h;\n }\n else {\n h = 0.0001;\n }\n let radius = this._radius - RandomRange(0, this._radius * this.radiusRange);\n radius = radius * h;\n const randX = radius * Math.sin(s);\n const randZ = radius * Math.cos(s);\n const randY = h * this._height;\n if (isLocal) {\n positionToUpdate.x = randX;\n positionToUpdate.y = randY;\n positionToUpdate.z = randZ;\n return;\n }\n Vector3.TransformCoordinatesFromFloatsToRef(randX, randY, randZ, worldMatrix, positionToUpdate);\n }\n /**\n * Clones the current emitter and returns a copy of it\n * @returns the new emitter\n */\n clone() {\n const newOne = new ConeParticleEmitter(this._radius, this._angle, this.directionRandomizer);\n DeepCopier.DeepCopy(this, newOne);\n return newOne;\n }\n /**\n * Called by the GPUParticleSystem to setup the update shader\n * @param uboOrEffect defines the update shader\n */\n applyToShader(uboOrEffect) {\n uboOrEffect.setFloat2(\"radius\", this._radius, this.radiusRange);\n uboOrEffect.setFloat(\"coneAngle\", this._angle);\n uboOrEffect.setFloat2(\"height\", this._height, this.heightRange);\n uboOrEffect.setFloat(\"directionRandomizer\", this.directionRandomizer);\n }\n /**\n * Creates the structure of the ubo for this particle emitter\n * @param ubo ubo to create the structure for\n */\n buildUniformLayout(ubo) {\n ubo.addUniform(\"radius\", 2);\n ubo.addUniform(\"coneAngle\", 1);\n ubo.addUniform(\"height\", 2);\n ubo.addUniform(\"directionRandomizer\", 1);\n }\n /**\n * Returns a string to use to update the GPU particles update shader\n * @returns a string containing the defines string\n */\n getEffectDefines() {\n let defines = \"#define CONEEMITTER\";\n if (this.emitFromSpawnPointOnly) {\n defines += \"\\n#define CONEEMITTERSPAWNPOINT\";\n }\n return defines;\n }\n /**\n * Returns the string \"ConeParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"ConeParticleEmitter\";\n }\n /**\n * Serializes the particle system to a JSON object.\n * @returns the JSON object\n */\n serialize() {\n const serializationObject = {};\n serializationObject.type = this.getClassName();\n serializationObject.radius = this._radius;\n serializationObject.angle = this._angle;\n serializationObject.directionRandomizer = this.directionRandomizer;\n serializationObject.radiusRange = this.radiusRange;\n serializationObject.heightRange = this.heightRange;\n serializationObject.emitFromSpawnPointOnly = this.emitFromSpawnPointOnly;\n return serializationObject;\n }\n /**\n * Parse properties from a JSON object\n * @param serializationObject defines the JSON object\n */\n parse(serializationObject) {\n this.radius = serializationObject.radius;\n this.angle = serializationObject.angle;\n this.directionRandomizer = serializationObject.directionRandomizer;\n this.radiusRange = serializationObject.radiusRange !== undefined ? serializationObject.radiusRange : 1;\n this.heightRange = serializationObject.radiusRange !== undefined ? serializationObject.heightRange : 1;\n this.emitFromSpawnPointOnly = serializationObject.emitFromSpawnPointOnly !== undefined ? serializationObject.emitFromSpawnPointOnly : false;\n }\n}\nexport class ConeDirectedParticleEmitter extends ConeParticleEmitter {\n constructor(radius = 1, angle = Math.PI, \n /**\n * [Up vector] The min limit of the emission direction.\n */\n direction1 = new Vector3(0, 1, 0), \n /**\n * [Up vector] The max limit of the emission direction.\n */\n direction2 = new Vector3(0, 1, 0)) {\n super(radius, angle);\n this.direction1 = direction1;\n this.direction2 = direction2;\n }\n /**\n * Called by the particle System when the direction is computed for the created particle.\n * @param worldMatrix is the world matrix of the particle system\n * @param directionToUpdate is the direction vector to update with the result\n */\n startDirectionFunction(worldMatrix, directionToUpdate) {\n const randX = RandomRange(this.direction1.x, this.direction2.x);\n const randY = RandomRange(this.direction1.y, this.direction2.y);\n const randZ = RandomRange(this.direction1.z, this.direction2.z);\n Vector3.TransformNormalFromFloatsToRef(randX, randY, randZ, worldMatrix, directionToUpdate);\n }\n /**\n * Clones the current emitter and returns a copy of it\n * @returns the new emitter\n */\n clone() {\n const newOne = new ConeDirectedParticleEmitter(this.radius, this.angle, this.direction1, this.direction2);\n DeepCopier.DeepCopy(this, newOne);\n return newOne;\n }\n /**\n * Called by the GPUParticleSystem to setup the update shader\n * @param uboOrEffect defines the update shader\n */\n applyToShader(uboOrEffect) {\n uboOrEffect.setFloat(\"radius\", this.radius);\n uboOrEffect.setFloat(\"radiusRange\", this.radiusRange);\n uboOrEffect.setVector3(\"direction1\", this.direction1);\n uboOrEffect.setVector3(\"direction2\", this.direction2);\n }\n /**\n * Creates the structure of the ubo for this particle emitter\n * @param ubo ubo to create the structure for\n */\n buildUniformLayout(ubo) {\n ubo.addUniform(\"radius\", 1);\n ubo.addUniform(\"radiusRange\", 1);\n ubo.addUniform(\"direction1\", 3);\n ubo.addUniform(\"direction2\", 3);\n }\n /**\n * Returns a string to use to update the GPU particles update shader\n * @returns a string containing the defines string\n */\n getEffectDefines() {\n return \"#define CONEEMITTER\\n#define DIRECTEDCONEEMITTER\";\n }\n /**\n * Returns the string \"ConeDirectedParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"ConeDirectedParticleEmitter\";\n }\n /**\n * Serializes the particle system to a JSON object.\n * @returns the JSON object\n */\n serialize() {\n const serializationObject = super.serialize();\n serializationObject.direction1 = this.direction1.asArray();\n serializationObject.direction2 = this.direction2.asArray();\n return serializationObject;\n }\n /**\n * Parse properties from a JSON object\n * @param serializationObject defines the JSON object\n */\n parse(serializationObject) {\n super.parse(serializationObject);\n this.direction1.copyFrom(serializationObject.direction1);\n this.direction2.copyFrom(serializationObject.direction2);\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}