import { Vector3 } from '../math/Vector3.js'; import { Object3D } from '../core/Object3D.js'; import { Line } from '../objects/Line.js'; import { Float32BufferAttribute } from '../core/BufferAttribute.js'; import { BufferGeometry } from '../core/BufferGeometry.js'; import { LineBasicMaterial } from '../materials/LineBasicMaterial.js'; const _v1 = /*@__PURE__*/ new Vector3(); const _v2 = /*@__PURE__*/ new Vector3(); const _v3 = /*@__PURE__*/ new Vector3(); class DirectionalLightHelper extends Object3D { constructor(light, size, color) { super(); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; this.color = color; if (size === undefined) size = 1; let geometry = new BufferGeometry(); geometry.setAttribute('position', new Float32BufferAttribute([-size, size, 0, size, size, 0, size, -size, 0, -size, -size, 0, -size, size, 0], 3)); const material = new LineBasicMaterial({ fog: false, toneMapped: false }); this.lightPlane = new Line(geometry, material); this.add(this.lightPlane); geometry = new BufferGeometry(); geometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3)); this.targetLine = new Line(geometry, material); this.add(this.targetLine); this.update(); } dispose() { this.lightPlane.geometry.dispose(); this.lightPlane.material.dispose(); this.targetLine.geometry.dispose(); this.targetLine.material.dispose(); } update() { _v1.setFromMatrixPosition(this.light.matrixWorld); _v2.setFromMatrixPosition(this.light.target.matrixWorld); _v3.subVectors(_v2, _v1); this.lightPlane.lookAt(_v2); if (this.color !== undefined) { this.lightPlane.material.color.set(this.color); this.targetLine.material.color.set(this.color); } else { this.lightPlane.material.color.copy(this.light.color); this.targetLine.material.color.copy(this.light.color); } this.targetLine.lookAt(_v2); this.targetLine.scale.z = _v3.length(); } } export { DirectionalLightHelper };