Tengo un módulo llamado LoadingBar:
... export default class LoadingBar { constructor() { ... const overlayGeometry = new THREE.PlaneGeometry(2, 2, 1, 1) const overlayMaterial = new THREE.ShaderMaterial ({ //wireframe: true, transparent: true, uniforms: { uAlpha: {value: 0.5} }, vertexShader: ` void main() { gl_Position = vec4(position, 1.0); } `, fragmentShader: ` uniform float uAlpha; void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, uAlpha); } ` }) const overlay = new THREE.Mesh(overlayGeometry, overlayMaterial) this.scene.add(overlay) } }y otro llamado Recursos:
import LoadingBar from '../World/LoadingBar.js' export default class Resources extends EventEmitter { constructor(sources) { super() this.sources = sources ... this.LoadingBar = new LoadingBar() } setLoaders() { const loadingManager = new THREE.LoadingManager( // Loaded () => { ***gsap.to(overlayMaterial.uniforms.uAlpha, { duration: 3, value: 1 })*** }, // Progress () => { console.log('progress') } ) this.gltfLoader = new GLTFLoader(loadingManager) this.loaders = {} this.loaders.gltfLoader = new GLTFLoader() this.loaders.textureLoader = new THREE.TextureLoader() this.loaders.cubeTextureLoader = new THREE.CubeTextureLoader(loadingManager) } A pesar de importarlo, aparece un error que dice que el overlay material is not defined . No puedo ver por qué no puede acceder al módulo de la barra de carga. He eliminado tanto código innecesario como creo que puedo sin que sea imposible responder. PONGO ASTERIKS donde en la línea que da el error.
La variable overlayMaterial solo está disponible localmente dentro de la clase LoadingBar. Si desea que esté disponible en otro lugar, deberá definirlo fuera de la clase LoadingBar (no le gusta que lo esté, no está claro en su ejemplo...) y exportarlo por separado:
export const overlayMaterial = [your code here]
Luego puede importar en su otro módulo: import {overlayMaterial} from "../World/LoadingBar.js"