cd66ed01bb056617c39c7cc048fde652c65e88a61a0f0b32b6f321705f585030.json 29 KB

1
  1. {"ast":null,"code":"import { Vector3 } from \"../../Maths/math.vector.js\";\nimport { RandomRange } from \"../../Maths/math.scalar.functions.js\";\nimport { DeepCopier } from \"../../Misc/deepCopier.js\";\n/**\n * Particle emitter emitting particles from the inside of a cylinder.\n * It emits the particles alongside the cylinder radius. The emission direction might be randomized.\n */\nexport class CylinderParticleEmitter {\n /**\n * Creates a new instance CylinderParticleEmitter\n * @param radius the radius of the emission cylinder (1 by default)\n * @param height the height of the emission cylinder (1 by default)\n * @param radiusRange the range of the emission cylinder [0-1] 0 Surface only, 1 Entire Radius (1 by default)\n * @param directionRandomizer defines how much to randomize the particle direction [0-1]\n */\n constructor(\n /**\n * [1] The radius of the emission cylinder.\n */\n radius = 1,\n /**\n * [1] The height of the emission cylinder.\n */\n height = 1,\n /**\n * [1] The range of emission [0-1] 0 Surface only, 1 Entire Radius.\n */\n radiusRange = 1,\n /**\n * [0] How much to randomize the particle direction [0-1].\n */\n directionRandomizer = 0) {\n this.radius = radius;\n this.height = height;\n this.radiusRange = radiusRange;\n this.directionRandomizer = directionRandomizer;\n this._tempVector = Vector3.Zero();\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 * @param inverseWorldMatrix defines the inverted world matrix to use if isLocal is false\n */\n startDirectionFunction(worldMatrix, directionToUpdate, particle, isLocal, inverseWorldMatrix) {\n particle.position.subtractToRef(worldMatrix.getTranslation(), this._tempVector);\n this._tempVector.normalize();\n Vector3.TransformNormalToRef(this._tempVector, inverseWorldMatrix, this._tempVector);\n const randY = RandomRange(-this.directionRandomizer / 2, this.directionRandomizer / 2);\n let angle = Math.atan2(this._tempVector.x, this._tempVector.z);\n angle += RandomRange(-Math.PI / 2, Math.PI / 2) * this.directionRandomizer;\n this._tempVector.y = randY; // set direction y to rand y to mirror normal of cylinder surface\n this._tempVector.x = Math.sin(angle);\n this._tempVector.z = Math.cos(angle);\n this._tempVector.normalize();\n if (isLocal) {\n directionToUpdate.copyFrom(this._tempVector);\n return;\n }\n Vector3.TransformNormalFromFloatsToRef(this._tempVector.x, this._tempVector.y, this._tempVector.z, worldMatrix, directionToUpdate);\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 yPos = RandomRange(-this.height / 2, this.height / 2);\n const angle = RandomRange(0, 2 * Math.PI);\n // Pick a properly distributed point within the circle https://programming.guide/random-point-within-circle.html\n const radiusDistribution = RandomRange((1 - this.radiusRange) * (1 - this.radiusRange), 1);\n const positionRadius = Math.sqrt(radiusDistribution) * this.radius;\n const xPos = positionRadius * Math.cos(angle);\n const zPos = positionRadius * Math.sin(angle);\n if (isLocal) {\n positionToUpdate.copyFromFloats(xPos, yPos, zPos);\n return;\n }\n Vector3.TransformCoordinatesFromFloatsToRef(xPos, yPos, zPos, 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 CylinderParticleEmitter(this.radius, 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.setFloat(\"radius\", this.radius);\n uboOrEffect.setFloat(\"height\", this.height);\n uboOrEffect.setFloat(\"radiusRange\", this.radiusRange);\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\", 1);\n ubo.addUniform(\"height\", 1);\n ubo.addUniform(\"radiusRange\", 1);\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 return \"#define CYLINDEREMITTER\";\n }\n /**\n * Returns the string \"CylinderParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"CylinderParticleEmitter\";\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.height = this.height;\n serializationObject.radiusRange = this.radiusRange;\n serializationObject.directionRandomizer = this.directionRandomizer;\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.height = serializationObject.height;\n this.radiusRange = serializationObject.radiusRange;\n this.directionRandomizer = serializationObject.directionRandomizer;\n }\n}\n/**\n * Particle emitter emitting particles from the inside of a cylinder.\n * It emits the particles randomly between two vectors.\n */\nexport class CylinderDirectedParticleEmitter extends CylinderParticleEmitter {\n /**\n * Creates a new instance CylinderDirectedParticleEmitter\n * @param radius the radius of the emission cylinder (1 by default)\n * @param height the height of the emission cylinder (1 by default)\n * @param radiusRange the range of the emission cylinder [0-1] 0 Surface only, 1 Entire Radius (1 by default)\n * @param direction1 the min limit of the emission direction (up vector by default)\n * @param direction2 the max limit of the emission direction (up vector by default)\n */\n constructor(radius = 1, height = 1, radiusRange = 1,\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, height, radiusRange);\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 * @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 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 if (isLocal) {\n directionToUpdate.copyFromFloats(randX, randY, randZ);\n return;\n }\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 CylinderDirectedParticleEmitter(this.radius, this.height, this.radiusRange, 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(\"height\", this.height);\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(\"height\", 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 CYLINDEREMITTER\\n#define DIRECTEDCYLINDEREMITTER\";\n }\n /**\n * Returns the string \"CylinderDirectedParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"CylinderDirectedParticleEmitter\";\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 Vector3.FromArrayToRef(serializationObject.direction1, 0, this.direction1);\n Vector3.FromArrayToRef(serializationObject.direction2, 0, this.direction2);\n }\n}","map":{"version":3,"names":["Vector3","RandomRange","DeepCopier","CylinderParticleEmitter","constructor","radius","height","radiusRange","directionRandomizer","_tempVector","Zero","startDirectionFunction","worldMatrix","directionToUpdate","particle","isLocal","inverseWorldMatrix","position","subtractToRef","getTranslation","normalize","TransformNormalToRef","randY","angle","Math","atan2","x","z","PI","y","sin","cos","copyFrom","TransformNormalFromFloatsToRef","startPositionFunction","positionToUpdate","yPos","radiusDistribution","positionRadius","sqrt","xPos","zPos","copyFromFloats","TransformCoordinatesFromFloatsToRef","clone","newOne","DeepCopy","applyToShader","uboOrEffect","setFloat","buildUniformLayout","ubo","addUniform","getEffectDefines","getClassName","serialize","serializationObject","type","parse","CylinderDirectedParticleEmitter","direction1","direction2","_particle","randX","randZ","setVector3","asArray","FromArrayToRef"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Particles/EmitterTypes/cylinderParticleEmitter.js"],"sourcesContent":["import { Vector3 } from \"../../Maths/math.vector.js\";\nimport { RandomRange } from \"../../Maths/math.scalar.functions.js\";\nimport { DeepCopier } from \"../../Misc/deepCopier.js\";\n/**\n * Particle emitter emitting particles from the inside of a cylinder.\n * It emits the particles alongside the cylinder radius. The emission direction might be randomized.\n */\nexport class CylinderParticleEmitter {\n /**\n * Creates a new instance CylinderParticleEmitter\n * @param radius the radius of the emission cylinder (1 by default)\n * @param height the height of the emission cylinder (1 by default)\n * @param radiusRange the range of the emission cylinder [0-1] 0 Surface only, 1 Entire Radius (1 by default)\n * @param directionRandomizer defines how much to randomize the particle direction [0-1]\n */\n constructor(\n /**\n * [1] The radius of the emission cylinder.\n */\n radius = 1, \n /**\n * [1] The height of the emission cylinder.\n */\n height = 1, \n /**\n * [1] The range of emission [0-1] 0 Surface only, 1 Entire Radius.\n */\n radiusRange = 1, \n /**\n * [0] How much to randomize the particle direction [0-1].\n */\n directionRandomizer = 0) {\n this.radius = radius;\n this.height = height;\n this.radiusRange = radiusRange;\n this.directionRandomizer = directionRandomizer;\n this._tempVector = Vector3.Zero();\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 * @param inverseWorldMatrix defines the inverted world matrix to use if isLocal is false\n */\n startDirectionFunction(worldMatrix, directionToUpdate, particle, isLocal, inverseWorldMatrix) {\n particle.position.subtractToRef(worldMatrix.getTranslation(), this._tempVector);\n this._tempVector.normalize();\n Vector3.TransformNormalToRef(this._tempVector, inverseWorldMatrix, this._tempVector);\n const randY = RandomRange(-this.directionRandomizer / 2, this.directionRandomizer / 2);\n let angle = Math.atan2(this._tempVector.x, this._tempVector.z);\n angle += RandomRange(-Math.PI / 2, Math.PI / 2) * this.directionRandomizer;\n this._tempVector.y = randY; // set direction y to rand y to mirror normal of cylinder surface\n this._tempVector.x = Math.sin(angle);\n this._tempVector.z = Math.cos(angle);\n this._tempVector.normalize();\n if (isLocal) {\n directionToUpdate.copyFrom(this._tempVector);\n return;\n }\n Vector3.TransformNormalFromFloatsToRef(this._tempVector.x, this._tempVector.y, this._tempVector.z, worldMatrix, directionToUpdate);\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 yPos = RandomRange(-this.height / 2, this.height / 2);\n const angle = RandomRange(0, 2 * Math.PI);\n // Pick a properly distributed point within the circle https://programming.guide/random-point-within-circle.html\n const radiusDistribution = RandomRange((1 - this.radiusRange) * (1 - this.radiusRange), 1);\n const positionRadius = Math.sqrt(radiusDistribution) * this.radius;\n const xPos = positionRadius * Math.cos(angle);\n const zPos = positionRadius * Math.sin(angle);\n if (isLocal) {\n positionToUpdate.copyFromFloats(xPos, yPos, zPos);\n return;\n }\n Vector3.TransformCoordinatesFromFloatsToRef(xPos, yPos, zPos, 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 CylinderParticleEmitter(this.radius, 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.setFloat(\"radius\", this.radius);\n uboOrEffect.setFloat(\"height\", this.height);\n uboOrEffect.setFloat(\"radiusRange\", this.radiusRange);\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\", 1);\n ubo.addUniform(\"height\", 1);\n ubo.addUniform(\"radiusRange\", 1);\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 return \"#define CYLINDEREMITTER\";\n }\n /**\n * Returns the string \"CylinderParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"CylinderParticleEmitter\";\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.height = this.height;\n serializationObject.radiusRange = this.radiusRange;\n serializationObject.directionRandomizer = this.directionRandomizer;\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.height = serializationObject.height;\n this.radiusRange = serializationObject.radiusRange;\n this.directionRandomizer = serializationObject.directionRandomizer;\n }\n}\n/**\n * Particle emitter emitting particles from the inside of a cylinder.\n * It emits the particles randomly between two vectors.\n */\nexport class CylinderDirectedParticleEmitter extends CylinderParticleEmitter {\n /**\n * Creates a new instance CylinderDirectedParticleEmitter\n * @param radius the radius of the emission cylinder (1 by default)\n * @param height the height of the emission cylinder (1 by default)\n * @param radiusRange the range of the emission cylinder [0-1] 0 Surface only, 1 Entire Radius (1 by default)\n * @param direction1 the min limit of the emission direction (up vector by default)\n * @param direction2 the max limit of the emission direction (up vector by default)\n */\n constructor(radius = 1, height = 1, radiusRange = 1, \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, height, radiusRange);\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 * @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 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 if (isLocal) {\n directionToUpdate.copyFromFloats(randX, randY, randZ);\n return;\n }\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 CylinderDirectedParticleEmitter(this.radius, this.height, this.radiusRange, 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(\"height\", this.height);\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(\"height\", 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 CYLINDEREMITTER\\n#define DIRECTEDCYLINDEREMITTER\";\n }\n /**\n * Returns the string \"CylinderDirectedParticleEmitter\"\n * @returns a string containing the class name\n */\n getClassName() {\n return \"CylinderDirectedParticleEmitter\";\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 Vector3.FromArrayToRef(serializationObject.direction1, 0, this.direction1);\n Vector3.FromArrayToRef(serializationObject.direction2, 0, this.direction2);\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}