{"ast":null,"code":"import { Scalar } from \"@babylonjs/core/Maths/math.scalar.js\";\nimport { SphericalHarmonics, SphericalPolynomial } from \"@babylonjs/core/Maths/sphericalPolynomial.js\";\nimport { Quaternion, Matrix } from \"@babylonjs/core/Maths/math.vector.js\";\nimport { RawCubeTexture } from \"@babylonjs/core/Materials/Textures/rawCubeTexture.js\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader.js\";\nconst NAME = \"EXT_lights_image_based\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_lights_image_based/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class EXT_lights_image_based {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n delete this._lights;\n }\n /** @internal */\n onLoading() {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name];\n this._lights = extension.lights;\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n return GLTFLoader.LoadExtensionAsync(context, scene, this.name, (extensionContext, extension) => {\n this._loader._allMaterialsDirtyRequired = true;\n const promises = new Array();\n promises.push(this._loader.loadSceneAsync(context, scene));\n this._loader.logOpen(`${extensionContext}`);\n const light = ArrayItem.Get(`${extensionContext}/light`, this._lights, extension.light);\n promises.push(this._loadLightAsync(`/extensions/${this.name}/lights/${extension.light}`, light).then(texture => {\n this._loader.babylonScene.environmentTexture = texture;\n }));\n this._loader.logClose();\n return Promise.all(promises).then(() => {});\n });\n }\n _loadLightAsync(context, light) {\n if (!light._loaded) {\n const promises = new Array();\n this._loader.logOpen(`${context}`);\n const imageData = new Array(light.specularImages.length);\n for (let mipmap = 0; mipmap < light.specularImages.length; mipmap++) {\n const faces = light.specularImages[mipmap];\n imageData[mipmap] = new Array(faces.length);\n for (let face = 0; face < faces.length; face++) {\n const specularImageContext = `${context}/specularImages/${mipmap}/${face}`;\n this._loader.logOpen(`${specularImageContext}`);\n const index = faces[face];\n const image = ArrayItem.Get(specularImageContext, this._loader.gltf.images, index);\n promises.push(this._loader.loadImageAsync(`/images/${index}`, image).then(data => {\n imageData[mipmap][face] = data;\n }));\n this._loader.logClose();\n }\n }\n this._loader.logClose();\n light._loaded = Promise.all(promises).then(() => {\n const babylonTexture = new RawCubeTexture(this._loader.babylonScene, null, light.specularImageSize);\n babylonTexture.name = light.name || \"environment\";\n light._babylonTexture = babylonTexture;\n if (light.intensity != undefined) {\n babylonTexture.level = light.intensity;\n }\n if (light.rotation) {\n let rotation = Quaternion.FromArray(light.rotation);\n // Invert the rotation so that positive rotation is counter-clockwise.\n if (!this._loader.babylonScene.useRightHandedSystem) {\n rotation = Quaternion.Inverse(rotation);\n }\n Matrix.FromQuaternionToRef(rotation, babylonTexture.getReflectionTextureMatrix());\n }\n if (!light.irradianceCoefficients) {\n throw new Error(`${context}: Irradiance coefficients are missing`);\n }\n const sphericalHarmonics = SphericalHarmonics.FromArray(light.irradianceCoefficients);\n sphericalHarmonics.scaleInPlace(light.intensity);\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\n const sphericalPolynomial = SphericalPolynomial.FromHarmonics(sphericalHarmonics);\n // Compute the lod generation scale to fit exactly to the number of levels available.\n const lodGenerationScale = (imageData.length - 1) / Scalar.Log2(light.specularImageSize);\n return babylonTexture.updateRGBDAsync(imageData, sphericalPolynomial, lodGenerationScale);\n });\n }\n return light._loaded.then(() => {\n return light._babylonTexture;\n });\n }\n}\nGLTFLoader.RegisterExtension(NAME, loader => new EXT_lights_image_based(loader));","map":{"version":3,"names":["Scalar","SphericalHarmonics","SphericalPolynomial","Quaternion","Matrix","RawCubeTexture","GLTFLoader","ArrayItem","NAME","EXT_lights_image_based","constructor","loader","name","_loader","enabled","isExtensionUsed","dispose","_lights","onLoading","extensions","gltf","extension","lights","loadSceneAsync","context","scene","LoadExtensionAsync","extensionContext","_allMaterialsDirtyRequired","promises","Array","push","logOpen","light","Get","_loadLightAsync","then","texture","babylonScene","environmentTexture","logClose","Promise","all","_loaded","imageData","specularImages","length","mipmap","faces","face","specularImageContext","index","image","images","loadImageAsync","data","babylonTexture","specularImageSize","_babylonTexture","intensity","undefined","level","rotation","FromArray","useRightHandedSystem","Inverse","FromQuaternionToRef","getReflectionTextureMatrix","irradianceCoefficients","Error","sphericalHarmonics","scaleInPlace","convertIrradianceToLambertianRadiance","sphericalPolynomial","FromHarmonics","lodGenerationScale","Log2","updateRGBDAsync","RegisterExtension"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_image_based.js"],"sourcesContent":["import { Scalar } from \"@babylonjs/core/Maths/math.scalar.js\";\nimport { SphericalHarmonics, SphericalPolynomial } from \"@babylonjs/core/Maths/sphericalPolynomial.js\";\nimport { Quaternion, Matrix } from \"@babylonjs/core/Maths/math.vector.js\";\nimport { RawCubeTexture } from \"@babylonjs/core/Materials/Textures/rawCubeTexture.js\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader.js\";\nconst NAME = \"EXT_lights_image_based\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_lights_image_based/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class EXT_lights_image_based {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n delete this._lights;\n }\n /** @internal */\n onLoading() {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name];\n this._lights = extension.lights;\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n return GLTFLoader.LoadExtensionAsync(context, scene, this.name, (extensionContext, extension) => {\n this._loader._allMaterialsDirtyRequired = true;\n const promises = new Array();\n promises.push(this._loader.loadSceneAsync(context, scene));\n this._loader.logOpen(`${extensionContext}`);\n const light = ArrayItem.Get(`${extensionContext}/light`, this._lights, extension.light);\n promises.push(this._loadLightAsync(`/extensions/${this.name}/lights/${extension.light}`, light).then((texture) => {\n this._loader.babylonScene.environmentTexture = texture;\n }));\n this._loader.logClose();\n return Promise.all(promises).then(() => { });\n });\n }\n _loadLightAsync(context, light) {\n if (!light._loaded) {\n const promises = new Array();\n this._loader.logOpen(`${context}`);\n const imageData = new Array(light.specularImages.length);\n for (let mipmap = 0; mipmap < light.specularImages.length; mipmap++) {\n const faces = light.specularImages[mipmap];\n imageData[mipmap] = new Array(faces.length);\n for (let face = 0; face < faces.length; face++) {\n const specularImageContext = `${context}/specularImages/${mipmap}/${face}`;\n this._loader.logOpen(`${specularImageContext}`);\n const index = faces[face];\n const image = ArrayItem.Get(specularImageContext, this._loader.gltf.images, index);\n promises.push(this._loader.loadImageAsync(`/images/${index}`, image).then((data) => {\n imageData[mipmap][face] = data;\n }));\n this._loader.logClose();\n }\n }\n this._loader.logClose();\n light._loaded = Promise.all(promises).then(() => {\n const babylonTexture = new RawCubeTexture(this._loader.babylonScene, null, light.specularImageSize);\n babylonTexture.name = light.name || \"environment\";\n light._babylonTexture = babylonTexture;\n if (light.intensity != undefined) {\n babylonTexture.level = light.intensity;\n }\n if (light.rotation) {\n let rotation = Quaternion.FromArray(light.rotation);\n // Invert the rotation so that positive rotation is counter-clockwise.\n if (!this._loader.babylonScene.useRightHandedSystem) {\n rotation = Quaternion.Inverse(rotation);\n }\n Matrix.FromQuaternionToRef(rotation, babylonTexture.getReflectionTextureMatrix());\n }\n if (!light.irradianceCoefficients) {\n throw new Error(`${context}: Irradiance coefficients are missing`);\n }\n const sphericalHarmonics = SphericalHarmonics.FromArray(light.irradianceCoefficients);\n sphericalHarmonics.scaleInPlace(light.intensity);\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\n const sphericalPolynomial = SphericalPolynomial.FromHarmonics(sphericalHarmonics);\n // Compute the lod generation scale to fit exactly to the number of levels available.\n const lodGenerationScale = (imageData.length - 1) / Scalar.Log2(light.specularImageSize);\n return babylonTexture.updateRGBDAsync(imageData, sphericalPolynomial, lodGenerationScale);\n });\n }\n return light._loaded.then(() => {\n return light._babylonTexture;\n });\n }\n}\nGLTFLoader.RegisterExtension(NAME, (loader) => new EXT_lights_image_based(loader));\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}