Spaces:
Running
Running
File size: 2,052 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 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 };
|