12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import { Vector3 } from '../math/Vector3.js';
- import { Object3D } from '../core/Object3D.js';
- import { LineSegments } from '../objects/LineSegments.js';
- import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
- import { Float32BufferAttribute } from '../core/BufferAttribute.js';
- import { BufferGeometry } from '../core/BufferGeometry.js';
- const _vector = /*@__PURE__*/ new Vector3();
- class SpotLightHelper extends Object3D {
- constructor( light, color ) {
- super();
- this.light = light;
- this.matrix = light.matrixWorld;
- this.matrixAutoUpdate = false;
- this.color = color;
- this.type = 'SpotLightHelper';
- const geometry = new BufferGeometry();
- const positions = [
- 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0, 1,
- 0, 0, 0, - 1, 0, 1,
- 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, - 1, 1
- ];
- for ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {
- const p1 = ( i / l ) * Math.PI * 2;
- const p2 = ( j / l ) * Math.PI * 2;
- positions.push(
- Math.cos( p1 ), Math.sin( p1 ), 1,
- Math.cos( p2 ), Math.sin( p2 ), 1
- );
- }
- geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );
- const material = new LineBasicMaterial( { fog: false, toneMapped: false } );
- this.cone = new LineSegments( geometry, material );
- this.add( this.cone );
- this.update();
- }
- dispose() {
- this.cone.geometry.dispose();
- this.cone.material.dispose();
- }
- update() {
- this.light.updateWorldMatrix( true, false );
- this.light.target.updateWorldMatrix( true, false );
- const coneLength = this.light.distance ? this.light.distance : 1000;
- const coneWidth = coneLength * Math.tan( this.light.angle );
- this.cone.scale.set( coneWidth, coneWidth, coneLength );
- _vector.setFromMatrixPosition( this.light.target.matrixWorld );
- this.cone.lookAt( _vector );
- if ( this.color !== undefined ) {
- this.cone.material.color.set( this.color );
- } else {
- this.cone.material.color.copy( this.light.color );
- }
- }
- }
- export { SpotLightHelper };
|