Mr.doob 8 anni fa
parent
commit
6c9130b156
3 ha cambiato i file con 362 aggiunte e 349 eliminazioni
  1. 50 43
      build/three.js
  2. 262 263
      build/three.min.js
  3. 50 43
      build/three.modules.js

+ 50 - 43
build/three.js

@@ -40179,6 +40179,7 @@
 
 	/**
 	 * @author abelnation / http://github.com/abelnation
+	 * @author Mugen87 / http://github.com/Mugen87
 	 */
 
 	function RectAreaLightHelper( light ) {
@@ -40188,37 +40189,28 @@
 		this.light = light;
 		this.light.updateMatrixWorld();
 
-		this.lightMat = new MeshBasicMaterial( {
+		var materialFront = new MeshBasicMaterial( {
 			color: light.color,
 			fog: false
 		} );
 
-		this.lightWireMat = new MeshBasicMaterial( {
+		var materialBack = new MeshBasicMaterial( {
 			color: light.color,
 			fog: false,
 			wireframe: true
 		} );
 
-		var hx = this.light.width / 2.0;
-		var hy = this.light.height / 2.0;
+		var geometry = new BufferGeometry();
 
-		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 )
-		] ) );
+		geometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 6 * 3 ), 3 ) );
 
 		// shows the "front" of the light, e.g. where light comes from
 
-		this.lightMesh = new Mesh( this.lightShape, this.lightMat );
+		this.add( new Mesh( geometry, materialFront ) );
 
 		// 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.add( new Mesh( geometry, materialBack ) );
 
 		this.update();
 
@@ -40229,51 +40221,66 @@
 
 	RectAreaLightHelper.prototype.dispose = function () {
 
-		this.lightMesh.geometry.dispose();
-		this.lightMesh.material.dispose();
-		this.lightWireMesh.geometry.dispose();
-		this.lightWireMesh.material.dispose();
+		this.children[ 0 ].geometry.dispose();
+		this.children[ 0 ].material.dispose();
+		this.children[ 1 ].geometry.dispose();
+		this.children[ 1 ].material.dispose();
 
 	};
 
 	RectAreaLightHelper.prototype.update = function () {
 
-		var vector = new Vector3();
+		var vector1 = new Vector3();
 		var vector2 = new Vector3();
 
-		// TODO (abelnation) why not just make light helpers a child of the light object?
-		if ( this.light.target ) {
+		return function update() {
 
-			vector.setFromMatrixPosition( this.light.matrixWorld );
-			vector2.setFromMatrixPosition( this.light.target.matrixWorld );
+			var mesh1 = this.children[ 0 ];
+			var mesh2 = this.children[ 1 ];
 
-			var lookVec = vector2.clone().sub( vector );
-			this.lightMesh.lookAt( lookVec );
-			this.lightWireMesh.lookAt( lookVec );
+			if ( this.light.target ) {
 
-		}
+				vector1.setFromMatrixPosition( this.light.matrixWorld );
+				vector2.setFromMatrixPosition( this.light.target.matrixWorld );
 
-		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 lookVec = vector2.clone().sub( vector1 );
+				mesh1.lookAt( lookVec );
+				mesh2.lookAt( lookVec );
 
-		var oldShape = this.lightShape;
+			}
 
-		var hx = this.light.width / 2.0;
-		var hy = this.light.height / 2.0;
+			// update materials
 
-		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 )
-		] ) );
+			mesh1.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );
+			mesh2.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );
 
-		this.lightMesh.geometry = this.lightShape;
-		this.lightWireMesh.geometry = this.lightShape;
+			// calculate new dimensions of the helper
 
-		oldShape.dispose();
+			var hx = this.light.width * 0.5;
+			var hy = this.light.height * 0.5;
 
-	};
+			// because the buffer attribute is shared over both geometries, we only have to update once
+
+			var position = mesh1.geometry.getAttribute( 'position' );
+			var array = position.array;
+
+			// first face
+
+			array[  0 ] =   hx; array[  1 ] = - hy; array[  2 ] = 0;
+			array[  3 ] =   hx; array[  4 ] =   hy; array[  5 ] = 0;
+			array[  6 ] = - hx; array[  7 ] =   hy; array[  8 ] = 0;
+
+			// second face
+
+			array[  9 ] = - hx; array[ 10 ] =   hy; array[ 11 ] = 0;
+			array[ 12 ] = - hx; array[ 13 ] = - hy; array[ 14 ] = 0;
+			array[ 15 ] =   hx; array[ 16 ] = - hy; array[ 17 ] = 0;
+
+			position.needsUpdate = true;
+
+		};
+
+	}();
 
 	/**
 	 * @author alteredq / http://alteredqualia.com/

File diff suppressed because it is too large
+ 262 - 263
build/three.min.js


+ 50 - 43
build/three.modules.js

@@ -40173,6 +40173,7 @@ PointLightHelper.prototype.update = function () {
 
 /**
  * @author abelnation / http://github.com/abelnation
+ * @author Mugen87 / http://github.com/Mugen87
  */
 
 function RectAreaLightHelper( light ) {
@@ -40182,37 +40183,28 @@ function RectAreaLightHelper( light ) {
 	this.light = light;
 	this.light.updateMatrixWorld();
 
-	this.lightMat = new MeshBasicMaterial( {
+	var materialFront = new MeshBasicMaterial( {
 		color: light.color,
 		fog: false
 	} );
 
-	this.lightWireMat = new MeshBasicMaterial( {
+	var materialBack = new MeshBasicMaterial( {
 		color: light.color,
 		fog: false,
 		wireframe: true
 	} );
 
-	var hx = this.light.width / 2.0;
-	var hy = this.light.height / 2.0;
+	var geometry = new BufferGeometry();
 
-	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 )
-	] ) );
+	geometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 6 * 3 ), 3 ) );
 
 	// shows the "front" of the light, e.g. where light comes from
 
-	this.lightMesh = new Mesh( this.lightShape, this.lightMat );
+	this.add( new Mesh( geometry, materialFront ) );
 
 	// 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.add( new Mesh( geometry, materialBack ) );
 
 	this.update();
 
@@ -40223,51 +40215,66 @@ RectAreaLightHelper.prototype.constructor = RectAreaLightHelper;
 
 RectAreaLightHelper.prototype.dispose = function () {
 
-	this.lightMesh.geometry.dispose();
-	this.lightMesh.material.dispose();
-	this.lightWireMesh.geometry.dispose();
-	this.lightWireMesh.material.dispose();
+	this.children[ 0 ].geometry.dispose();
+	this.children[ 0 ].material.dispose();
+	this.children[ 1 ].geometry.dispose();
+	this.children[ 1 ].material.dispose();
 
 };
 
 RectAreaLightHelper.prototype.update = function () {
 
-	var vector = new Vector3();
+	var vector1 = new Vector3();
 	var vector2 = new Vector3();
 
-	// TODO (abelnation) why not just make light helpers a child of the light object?
-	if ( this.light.target ) {
+	return function update() {
 
-		vector.setFromMatrixPosition( this.light.matrixWorld );
-		vector2.setFromMatrixPosition( this.light.target.matrixWorld );
+		var mesh1 = this.children[ 0 ];
+		var mesh2 = this.children[ 1 ];
 
-		var lookVec = vector2.clone().sub( vector );
-		this.lightMesh.lookAt( lookVec );
-		this.lightWireMesh.lookAt( lookVec );
+		if ( this.light.target ) {
 
-	}
+			vector1.setFromMatrixPosition( this.light.matrixWorld );
+			vector2.setFromMatrixPosition( this.light.target.matrixWorld );
 
-	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 lookVec = vector2.clone().sub( vector1 );
+			mesh1.lookAt( lookVec );
+			mesh2.lookAt( lookVec );
 
-	var oldShape = this.lightShape;
+		}
 
-	var hx = this.light.width / 2.0;
-	var hy = this.light.height / 2.0;
+		// update materials
 
-	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 )
-	] ) );
+		mesh1.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );
+		mesh2.material.color.copy( this.light.color ).multiplyScalar( this.light.intensity );
 
-	this.lightMesh.geometry = this.lightShape;
-	this.lightWireMesh.geometry = this.lightShape;
+		// calculate new dimensions of the helper
 
-	oldShape.dispose();
+		var hx = this.light.width * 0.5;
+		var hy = this.light.height * 0.5;
 
-};
+		// because the buffer attribute is shared over both geometries, we only have to update once
+
+		var position = mesh1.geometry.getAttribute( 'position' );
+		var array = position.array;
+
+		// first face
+
+		array[  0 ] =   hx; array[  1 ] = - hy; array[  2 ] = 0;
+		array[  3 ] =   hx; array[  4 ] =   hy; array[  5 ] = 0;
+		array[  6 ] = - hx; array[  7 ] =   hy; array[  8 ] = 0;
+
+		// second face
+
+		array[  9 ] = - hx; array[ 10 ] =   hy; array[ 11 ] = 0;
+		array[ 12 ] = - hx; array[ 13 ] = - hy; array[ 14 ] = 0;
+		array[ 15 ] =   hx; array[ 16 ] = - hy; array[ 17 ] = 0;
+
+		position.needsUpdate = true;
+
+	};
+
+}();
 
 /**
  * @author alteredq / http://alteredqualia.com/

Some files were not shown because too many files changed in this diff