Files
ComfyUI_frontend/src/extensions/core/load3d/LightingManager.ts
Terry Jia c502b86c31 [3d] refactor load3d nodes (#2683)
Co-authored-by: github-actions <github-actions@github.com>
2025-02-22 18:36:47 -05:00

79 lines
2.2 KiB
TypeScript

import * as THREE from 'three'
import { EventManagerInterface, LightingManagerInterface } from './interfaces'
export class LightingManager implements LightingManagerInterface {
lights: THREE.Light[] = []
private scene: THREE.Scene
private eventManager: EventManagerInterface
constructor(scene: THREE.Scene, eventManager: EventManagerInterface) {
this.scene = scene
this.eventManager = eventManager
}
init(): void {
this.setupLights()
}
dispose(): void {
this.lights.forEach((light) => {
this.scene.remove(light)
})
this.lights = []
}
setupLights(): void {
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5)
this.scene.add(ambientLight)
this.lights.push(ambientLight)
const mainLight = new THREE.DirectionalLight(0xffffff, 0.8)
mainLight.position.set(0, 10, 10)
this.scene.add(mainLight)
this.lights.push(mainLight)
const backLight = new THREE.DirectionalLight(0xffffff, 0.5)
backLight.position.set(0, 10, -10)
this.scene.add(backLight)
this.lights.push(backLight)
const leftFillLight = new THREE.DirectionalLight(0xffffff, 0.3)
leftFillLight.position.set(-10, 0, 0)
this.scene.add(leftFillLight)
this.lights.push(leftFillLight)
const rightFillLight = new THREE.DirectionalLight(0xffffff, 0.3)
rightFillLight.position.set(10, 0, 0)
this.scene.add(rightFillLight)
this.lights.push(rightFillLight)
const bottomLight = new THREE.DirectionalLight(0xffffff, 0.2)
bottomLight.position.set(0, -10, 0)
this.scene.add(bottomLight)
this.lights.push(bottomLight)
}
setLightIntensity(intensity: number): void {
this.lights.forEach((light) => {
if (light instanceof THREE.DirectionalLight) {
if (light === this.lights[1]) {
light.intensity = intensity * 0.8
} else if (light === this.lights[2]) {
light.intensity = intensity * 0.5
} else if (light === this.lights[5]) {
light.intensity = intensity * 0.2
} else {
light.intensity = intensity * 0.3
}
} else if (light instanceof THREE.AmbientLight) {
light.intensity = intensity * 0.5
}
})
this.eventManager.emitEvent('lightIntensityChange', intensity)
}
reset(): void {}
}