three-stdlib
Version:
stand-alone library of threejs examples
46 lines (45 loc) • 1.91 kB
JavaScript
import { Line, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Mesh, MeshBasicMaterial, BackSide } from "three";
class RectAreaLightHelper extends Line {
constructor(light, color) {
const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0];
const geometry = new BufferGeometry();
geometry.setAttribute("position", new Float32BufferAttribute(positions, 3));
geometry.computeBoundingSphere();
const material = new LineBasicMaterial({ fog: false });
super(geometry, material);
this.light = light;
this.color = color;
this.type = "RectAreaLightHelper";
const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];
const geometry2 = new BufferGeometry();
geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3));
geometry2.computeBoundingSphere();
this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false })));
}
updateMatrixWorld() {
this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);
if (this.color !== void 0) {
this.material.color.set(this.color);
this.children[0].material.color.set(this.color);
} else {
this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);
const c = this.material.color;
const max = Math.max(c.r, c.g, c.b);
if (max > 1)
c.multiplyScalar(1 / max);
this.children[0].material.color.copy(this.material.color);
}
this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);
this.children[0].matrixWorld.copy(this.matrixWorld);
}
dispose() {
this.geometry.dispose();
this.material.dispose();
this.children[0].geometry.dispose();
this.children[0].material.dispose();
}
}
export {
RectAreaLightHelper
};
//# sourceMappingURL=RectAreaLightHelper.js.map