| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /**
- * @author abelnation / http://github.com/abelnation
- */
- import { Object3D } from '../../core/Object3D';
- import { Vector3 } from '../../math/Vector3';
- import { Shape } from '../../extras/core/Shape';
- import { Mesh } from '../../objects/Mesh';
- import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial';
- import { ShapeBufferGeometry } from '../../geometries/ShapeBufferGeometry';
- function RectAreaLightHelper( light ) {
- Object3D.call( this );
- this.light = light;
- this.light.updateMatrixWorld();
- this.lightMat = new MeshBasicMaterial( {
- color: light.color,
- fog: false
- } );
- this.lightWireMat = new MeshBasicMaterial( {
- color: light.color,
- fog: false,
- wireframe: true
- } );
- var hx = this.light.width / 2.0;
- var hy = this.light.height / 2.0;
- this.lightShape = new ShapeBufferGeometry( new Shape( [
- new Vector3( - hx, hy, 0 ),
- new Vector3( hx, hy, 0 ),
- new Vector3( hx, - hy, 0 ),
- new Vector3( - hx, - hy, 0 )
- ] ) );
- // shows the "front" of the light, e.g. where light comes from
- this.lightMesh = new Mesh( this.lightShape, this.lightMat );
- // shows the "back" of the light, which does not emit light
- this.lightWireMesh = new Mesh( this.lightShape, this.lightWireMat );
- this.add( this.lightMesh );
- this.add( this.lightWireMesh );
- this.update();
- }
- RectAreaLightHelper.prototype = Object.create( Object3D.prototype );
- RectAreaLightHelper.prototype.constructor = RectAreaLightHelper;
- RectAreaLightHelper.prototype.dispose = function () {
- this.lightMesh.geometry.dispose();
- this.lightMesh.material.dispose();
- this.lightWireMesh.geometry.dispose();
- this.lightWireMesh.material.dispose();
- };
- RectAreaLightHelper.prototype.update = function () {
- var vector = new Vector3();
- var vector2 = new Vector3();
- // TODO (abelnation) why not just make light helpers a child of the light object?
- if ( this.light.target ) {
- vector.setFromMatrixPosition( this.light.matrixWorld );
- vector2.setFromMatrixPosition( this.light.target.matrixWorld );
- var lookVec = vector2.clone().sub( vector );
- this.lightMesh.lookAt( lookVec );
- this.lightWireMesh.lookAt( lookVec );
- }
- this.lightMesh.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );
- this.lightWireMesh.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );
- var oldShape = this.lightShape;
- var hx = this.light.width / 2.0;
- var hy = this.light.height / 2.0;
- this.lightShape = new ShapeBufferGeometry( new Shape( [
- new Vector3( - hx, hy, 0 ),
- new Vector3( hx, hy, 0 ),
- new Vector3( hx, - hy, 0 ),
- new Vector3( - hx, - hy, 0 )
- ] ) );
- this.lightMesh.geometry = this.lightShape;
- this.lightWireMesh.geometry = this.lightShape;
- oldShape.dispose();
- };
- export { RectAreaLightHelper };
|