Browse Source

frustrum improvements

ide user ide_gero3 13 years ago
parent
commit
4a95056b9a

+ 46 - 39
build/Three.js

@@ -1022,13 +1022,14 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
 
 
 	var i, plane,
 	var i, plane,
 	planes = this.planes;
 	planes = this.planes;
+    var me = m.elements;
 
 
-	planes[ 0 ].set( m.elements[3] - m.elements[0], m.elements[7] - m.elements[4], m.elements[11] - m.elements[8], m.elements[15] - m.elements[12] );
-	planes[ 1 ].set( m.elements[3] + m.elements[0], m.elements[7] + m.elements[4], m.elements[11] + m.elements[8], m.elements[15] + m.elements[12] );
-	planes[ 2 ].set( m.elements[3] + m.elements[1], m.elements[7] + m.elements[5], m.elements[11] + m.elements[9], m.elements[15] + m.elements[13] );
-	planes[ 3 ].set( m.elements[3] - m.elements[1], m.elements[7] - m.elements[5], m.elements[11] - m.elements[9], m.elements[15] - m.elements[13] );
-	planes[ 4 ].set( m.elements[3] - m.elements[2], m.elements[7] - m.elements[6], m.elements[11] - m.elements[10], m.elements[15] - m.elements[14] );
-	planes[ 5 ].set( m.elements[3] + m.elements[2], m.elements[7] + m.elements[6], m.elements[11] + m.elements[10], m.elements[15] + m.elements[14] );
+	planes[ 0 ].set( me[3] - me[0], me[7] - me[4], me[11] - me[8], me[15] - me[12] );
+	planes[ 1 ].set( me[3] + me[0], me[7] + me[4], me[11] + me[8], me[15] + me[12] );
+	planes[ 2 ].set( me[3] + me[1], me[7] + me[5], me[11] + me[9], me[15] + me[13] );
+	planes[ 3 ].set( me[3] - me[1], me[7] - me[5], me[11] - me[9], me[15] - me[13] );
+	planes[ 4 ].set( me[3] - me[2], me[7] - me[6], me[11] - me[10], me[15] - me[14] );
+	planes[ 5 ].set( me[3] + me[2], me[7] + me[6], me[11] + me[10], me[15] + me[14] );
 
 
 	for ( i = 0; i < 6; i ++ ) {
 	for ( i = 0; i < 6; i ++ ) {
 
 
@@ -1044,12 +1045,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
 	var distance,
 	var distance,
 	planes = this.planes,
 	planes = this.planes,
 	matrix = object.matrixWorld,
 	matrix = object.matrixWorld,
+    me = matrix.elements,
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 
 
 	for ( var i = 0; i < 6; i ++ ) {
 	for ( var i = 0; i < 6; i ++ ) {
 
 
-		distance = planes[ i ].x * matrix.elements[12] + planes[ i ].y * matrix.elements[13] + planes[ i ].z * matrix.elements[14] + planes[ i ].w;
+		distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
 		if ( distance <= radius ) return false;
 		if ( distance <= radius ) return false;
 
 
 	}
 	}
@@ -1685,13 +1687,15 @@ THREE.Matrix4.prototype = {
 	},
 	},
 
 
 	copy: function ( m ) {
 	copy: function ( m ) {
-
+        
+        var me = m.elements;
+        
 		this.set(
 		this.set(
 
 
-			m.elements[0], m.elements[4], m.elements[8], m.elements[12],
-			m.elements[1], m.elements[5], m.elements[9], m.elements[13],
-			m.elements[2], m.elements[6], m.elements[10], m.elements[14],
-			m.elements[3], m.elements[7], m.elements[11], m.elements[15]
+			me[0], me[4], me[8], me[12],
+			me[1], me[5], me[9], me[13],
+			me[2], me[6], me[10], me[14],
+			me[3], me[7], me[11], me[15]
 
 
 		);
 		);
 
 
@@ -2007,11 +2011,12 @@ THREE.Matrix4.prototype = {
 
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
         var te = this.elements;
         var te = this.elements;
-        
-		var n11 = m.elements[0], n12 = m.elements[4], n13 = m.elements[8], n14 = m.elements[12];
-		var n21 = m.elements[1], n22 = m.elements[5], n23 = m.elements[9], n24 = m.elements[13];
-		var n31 = m.elements[2], n32 = m.elements[6], n33 = m.elements[10], n34 = m.elements[14];
-		var n41 = m.elements[3], n42 = m.elements[7], n43 = m.elements[11], n44 = m.elements[15];
+        var me = m.elements;
+                
+		var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+		var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+		var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+		var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
 
 
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
@@ -2249,9 +2254,10 @@ THREE.Matrix4.prototype = {
 
 
 	extractPosition: function ( m ) {
 	extractPosition: function ( m ) {
         var te = this.elements;
         var te = this.elements;
-		te[12] = m.elements[12];
-		te[13] = m.elements[13];
-		te[14] = m.elements[14];
+        var me = m.elements;
+		te[12] = me[12];
+		te[13] = me[13];
+		te[14] = me[14];
 
 
 		return this;
 		return this;
 
 
@@ -2259,24 +2265,25 @@ THREE.Matrix4.prototype = {
 
 
 	extractRotation: function ( m ) {
 	extractRotation: function ( m ) {
         var te = this.elements;
         var te = this.elements;
+        var me = m.elements;
         
         
 		var vector = THREE.Matrix4.__v1;
 		var vector = THREE.Matrix4.__v1;
 
 
-		var scaleX = 1 / vector.set( m.elements[0], m.elements[1], m.elements[2] ).length();
-		var scaleY = 1 / vector.set( m.elements[4], m.elements[5], m.elements[6] ).length();
-		var scaleZ = 1 / vector.set( m.elements[8], m.elements[9], m.elements[10] ).length();
+		var scaleX = 1 / vector.set( me[0], me[1], me[2] ).length();
+		var scaleY = 1 / vector.set( me[4], me[5], me[6] ).length();
+		var scaleZ = 1 / vector.set( me[8], me[9], me[10] ).length();
 
 
-		te[0] = m.elements[0] * scaleX;
-		te[1] = m.elements[1] * scaleX;
-		te[2] = m.elements[2] * scaleX;
+		te[0] = me[0] * scaleX;
+		te[1] = me[1] * scaleX;
+		te[2] = me[2] * scaleX;
 
 
-		te[4] = m.elements[4] * scaleY;
-		te[5] = m.elements[5] * scaleY;
-		te[6] = m.elements[6] * scaleY;
+		te[4] = me[4] * scaleY;
+		te[5] = me[5] * scaleY;
+		te[6] = me[6] * scaleY;
 
 
-		te[8] = m.elements[8] * scaleZ;
-		te[9] = m.elements[9] * scaleZ;
-		te[10] = m.elements[10] * scaleZ;
+		te[8] = me[8] * scaleZ;
+		te[9] = me[9] * scaleZ;
+		te[10] = me[10] * scaleZ;
 
 
 		return this;
 		return this;
 
 
@@ -13414,7 +13421,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 				if ( ! ( object instanceof THREE.Mesh || object instanceof THREE.ParticleSystem ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 				if ( ! ( object instanceof THREE.Mesh || object instanceof THREE.ParticleSystem ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 					setupMatrices( object, camera );
 					setupMatrices( object, camera );
 
 
@@ -13464,7 +13471,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 				if( object.matrixAutoUpdate ) {
 				if( object.matrixAutoUpdate ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 				}
 				}
 
 
@@ -13875,7 +13882,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			object._modelViewMatrixArray = new Float32Array( 16 );
 			object._modelViewMatrixArray = new Float32Array( 16 );
 			object._objectMatrixArray = new Float32Array( 16 );
 			object._objectMatrixArray = new Float32Array( 16 );
 
 
-			object.matrixWorld.flattenToArray( object._objectMatrixArray );
+			//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 			if ( object instanceof THREE.Mesh ) {
 			if ( object instanceof THREE.Mesh ) {
 
 
@@ -35053,7 +35060,7 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 					if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 					if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-						object.matrixWorld.flattenToArray( object._objectMatrixArray );
+						//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 						object._modelViewMatrix.multiply( shadowCamera.matrixWorldInverse, object.matrixWorld);
 						object._modelViewMatrix.multiply( shadowCamera.matrixWorldInverse, object.matrixWorld);
 
 
 						webglObject.render = true;
 						webglObject.render = true;
@@ -35118,7 +35125,7 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 					if( object.matrixAutoUpdate ) {
 					if( object.matrixAutoUpdate ) {
 
 
-						object.matrixWorld.flattenToArray( object._objectMatrixArray );
+						//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 					}
 					}
 
 
@@ -35612,7 +35619,7 @@ THREE.DepthPassPlugin = function ( ) {
 
 
 				if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 				if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 					object._modelViewMatrix.multiply( camera.matrixWorldInverse, object.matrixWorld);
 					object._modelViewMatrix.multiply( camera.matrixWorldInverse, object.matrixWorld);
 
 
 					webglObject.render = true;
 					webglObject.render = true;
@@ -35677,7 +35684,7 @@ THREE.DepthPassPlugin = function ( ) {
 
 
 				if( object.matrixAutoUpdate ) {
 				if( object.matrixAutoUpdate ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 				}
 				}
 
 

+ 39 - 32
build/custom/ThreeCanvas.js

@@ -958,13 +958,14 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
 
 
 	var i, plane,
 	var i, plane,
 	planes = this.planes;
 	planes = this.planes;
+    var me = m.elements;
 
 
-	planes[ 0 ].set( m.elements[3] - m.elements[0], m.elements[7] - m.elements[4], m.elements[11] - m.elements[8], m.elements[15] - m.elements[12] );
-	planes[ 1 ].set( m.elements[3] + m.elements[0], m.elements[7] + m.elements[4], m.elements[11] + m.elements[8], m.elements[15] + m.elements[12] );
-	planes[ 2 ].set( m.elements[3] + m.elements[1], m.elements[7] + m.elements[5], m.elements[11] + m.elements[9], m.elements[15] + m.elements[13] );
-	planes[ 3 ].set( m.elements[3] - m.elements[1], m.elements[7] - m.elements[5], m.elements[11] - m.elements[9], m.elements[15] - m.elements[13] );
-	planes[ 4 ].set( m.elements[3] - m.elements[2], m.elements[7] - m.elements[6], m.elements[11] - m.elements[10], m.elements[15] - m.elements[14] );
-	planes[ 5 ].set( m.elements[3] + m.elements[2], m.elements[7] + m.elements[6], m.elements[11] + m.elements[10], m.elements[15] + m.elements[14] );
+	planes[ 0 ].set( me[3] - me[0], me[7] - me[4], me[11] - me[8], me[15] - me[12] );
+	planes[ 1 ].set( me[3] + me[0], me[7] + me[4], me[11] + me[8], me[15] + me[12] );
+	planes[ 2 ].set( me[3] + me[1], me[7] + me[5], me[11] + me[9], me[15] + me[13] );
+	planes[ 3 ].set( me[3] - me[1], me[7] - me[5], me[11] - me[9], me[15] - me[13] );
+	planes[ 4 ].set( me[3] - me[2], me[7] - me[6], me[11] - me[10], me[15] - me[14] );
+	planes[ 5 ].set( me[3] + me[2], me[7] + me[6], me[11] + me[10], me[15] + me[14] );
 
 
 	for ( i = 0; i < 6; i ++ ) {
 	for ( i = 0; i < 6; i ++ ) {
 
 
@@ -980,12 +981,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
 	var distance,
 	var distance,
 	planes = this.planes,
 	planes = this.planes,
 	matrix = object.matrixWorld,
 	matrix = object.matrixWorld,
+    me = matrix.elements,
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 
 
 	for ( var i = 0; i < 6; i ++ ) {
 	for ( var i = 0; i < 6; i ++ ) {
 
 
-		distance = planes[ i ].x * matrix.elements[12] + planes[ i ].y * matrix.elements[13] + planes[ i ].z * matrix.elements[14] + planes[ i ].w;
+		distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
 		if ( distance <= radius ) return false;
 		if ( distance <= radius ) return false;
 
 
 	}
 	}
@@ -1621,13 +1623,15 @@ THREE.Matrix4.prototype = {
 	},
 	},
 
 
 	copy: function ( m ) {
 	copy: function ( m ) {
-
+        
+        var me = m.elements;
+        
 		this.set(
 		this.set(
 
 
-			m.elements[0], m.elements[4], m.elements[8], m.elements[12],
-			m.elements[1], m.elements[5], m.elements[9], m.elements[13],
-			m.elements[2], m.elements[6], m.elements[10], m.elements[14],
-			m.elements[3], m.elements[7], m.elements[11], m.elements[15]
+			me[0], me[4], me[8], me[12],
+			me[1], me[5], me[9], me[13],
+			me[2], me[6], me[10], me[14],
+			me[3], me[7], me[11], me[15]
 
 
 		);
 		);
 
 
@@ -1943,11 +1947,12 @@ THREE.Matrix4.prototype = {
 
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
         var te = this.elements;
         var te = this.elements;
-        
-		var n11 = m.elements[0], n12 = m.elements[4], n13 = m.elements[8], n14 = m.elements[12];
-		var n21 = m.elements[1], n22 = m.elements[5], n23 = m.elements[9], n24 = m.elements[13];
-		var n31 = m.elements[2], n32 = m.elements[6], n33 = m.elements[10], n34 = m.elements[14];
-		var n41 = m.elements[3], n42 = m.elements[7], n43 = m.elements[11], n44 = m.elements[15];
+        var me = m.elements;
+                
+		var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+		var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+		var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+		var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
 
 
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
@@ -2185,9 +2190,10 @@ THREE.Matrix4.prototype = {
 
 
 	extractPosition: function ( m ) {
 	extractPosition: function ( m ) {
         var te = this.elements;
         var te = this.elements;
-		te[12] = m.elements[12];
-		te[13] = m.elements[13];
-		te[14] = m.elements[14];
+        var me = m.elements;
+		te[12] = me[12];
+		te[13] = me[13];
+		te[14] = me[14];
 
 
 		return this;
 		return this;
 
 
@@ -2195,24 +2201,25 @@ THREE.Matrix4.prototype = {
 
 
 	extractRotation: function ( m ) {
 	extractRotation: function ( m ) {
         var te = this.elements;
         var te = this.elements;
+        var me = m.elements;
         
         
 		var vector = THREE.Matrix4.__v1;
 		var vector = THREE.Matrix4.__v1;
 
 
-		var scaleX = 1 / vector.set( m.elements[0], m.elements[1], m.elements[2] ).length();
-		var scaleY = 1 / vector.set( m.elements[4], m.elements[5], m.elements[6] ).length();
-		var scaleZ = 1 / vector.set( m.elements[8], m.elements[9], m.elements[10] ).length();
+		var scaleX = 1 / vector.set( me[0], me[1], me[2] ).length();
+		var scaleY = 1 / vector.set( me[4], me[5], me[6] ).length();
+		var scaleZ = 1 / vector.set( me[8], me[9], me[10] ).length();
 
 
-		te[0] = m.elements[0] * scaleX;
-		te[1] = m.elements[1] * scaleX;
-		te[2] = m.elements[2] * scaleX;
+		te[0] = me[0] * scaleX;
+		te[1] = me[1] * scaleX;
+		te[2] = me[2] * scaleX;
 
 
-		te[4] = m.elements[4] * scaleY;
-		te[5] = m.elements[5] * scaleY;
-		te[6] = m.elements[6] * scaleY;
+		te[4] = me[4] * scaleY;
+		te[5] = me[5] * scaleY;
+		te[6] = me[6] * scaleY;
 
 
-		te[8] = m.elements[8] * scaleZ;
-		te[9] = m.elements[9] * scaleZ;
-		te[10] = m.elements[10] * scaleZ;
+		te[8] = me[8] * scaleZ;
+		te[9] = me[9] * scaleZ;
+		te[10] = me[10] * scaleZ;
 
 
 		return this;
 		return this;
 
 

+ 39 - 32
build/custom/ThreeDOM.js

@@ -958,13 +958,14 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
 
 
 	var i, plane,
 	var i, plane,
 	planes = this.planes;
 	planes = this.planes;
+    var me = m.elements;
 
 
-	planes[ 0 ].set( m.elements[3] - m.elements[0], m.elements[7] - m.elements[4], m.elements[11] - m.elements[8], m.elements[15] - m.elements[12] );
-	planes[ 1 ].set( m.elements[3] + m.elements[0], m.elements[7] + m.elements[4], m.elements[11] + m.elements[8], m.elements[15] + m.elements[12] );
-	planes[ 2 ].set( m.elements[3] + m.elements[1], m.elements[7] + m.elements[5], m.elements[11] + m.elements[9], m.elements[15] + m.elements[13] );
-	planes[ 3 ].set( m.elements[3] - m.elements[1], m.elements[7] - m.elements[5], m.elements[11] - m.elements[9], m.elements[15] - m.elements[13] );
-	planes[ 4 ].set( m.elements[3] - m.elements[2], m.elements[7] - m.elements[6], m.elements[11] - m.elements[10], m.elements[15] - m.elements[14] );
-	planes[ 5 ].set( m.elements[3] + m.elements[2], m.elements[7] + m.elements[6], m.elements[11] + m.elements[10], m.elements[15] + m.elements[14] );
+	planes[ 0 ].set( me[3] - me[0], me[7] - me[4], me[11] - me[8], me[15] - me[12] );
+	planes[ 1 ].set( me[3] + me[0], me[7] + me[4], me[11] + me[8], me[15] + me[12] );
+	planes[ 2 ].set( me[3] + me[1], me[7] + me[5], me[11] + me[9], me[15] + me[13] );
+	planes[ 3 ].set( me[3] - me[1], me[7] - me[5], me[11] - me[9], me[15] - me[13] );
+	planes[ 4 ].set( me[3] - me[2], me[7] - me[6], me[11] - me[10], me[15] - me[14] );
+	planes[ 5 ].set( me[3] + me[2], me[7] + me[6], me[11] + me[10], me[15] + me[14] );
 
 
 	for ( i = 0; i < 6; i ++ ) {
 	for ( i = 0; i < 6; i ++ ) {
 
 
@@ -980,12 +981,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
 	var distance,
 	var distance,
 	planes = this.planes,
 	planes = this.planes,
 	matrix = object.matrixWorld,
 	matrix = object.matrixWorld,
+    me = matrix.elements,
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 
 
 	for ( var i = 0; i < 6; i ++ ) {
 	for ( var i = 0; i < 6; i ++ ) {
 
 
-		distance = planes[ i ].x * matrix.elements[12] + planes[ i ].y * matrix.elements[13] + planes[ i ].z * matrix.elements[14] + planes[ i ].w;
+		distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
 		if ( distance <= radius ) return false;
 		if ( distance <= radius ) return false;
 
 
 	}
 	}
@@ -1621,13 +1623,15 @@ THREE.Matrix4.prototype = {
 	},
 	},
 
 
 	copy: function ( m ) {
 	copy: function ( m ) {
-
+        
+        var me = m.elements;
+        
 		this.set(
 		this.set(
 
 
-			m.elements[0], m.elements[4], m.elements[8], m.elements[12],
-			m.elements[1], m.elements[5], m.elements[9], m.elements[13],
-			m.elements[2], m.elements[6], m.elements[10], m.elements[14],
-			m.elements[3], m.elements[7], m.elements[11], m.elements[15]
+			me[0], me[4], me[8], me[12],
+			me[1], me[5], me[9], me[13],
+			me[2], me[6], me[10], me[14],
+			me[3], me[7], me[11], me[15]
 
 
 		);
 		);
 
 
@@ -1943,11 +1947,12 @@ THREE.Matrix4.prototype = {
 
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
         var te = this.elements;
         var te = this.elements;
-        
-		var n11 = m.elements[0], n12 = m.elements[4], n13 = m.elements[8], n14 = m.elements[12];
-		var n21 = m.elements[1], n22 = m.elements[5], n23 = m.elements[9], n24 = m.elements[13];
-		var n31 = m.elements[2], n32 = m.elements[6], n33 = m.elements[10], n34 = m.elements[14];
-		var n41 = m.elements[3], n42 = m.elements[7], n43 = m.elements[11], n44 = m.elements[15];
+        var me = m.elements;
+                
+		var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+		var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+		var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+		var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
 
 
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
@@ -2185,9 +2190,10 @@ THREE.Matrix4.prototype = {
 
 
 	extractPosition: function ( m ) {
 	extractPosition: function ( m ) {
         var te = this.elements;
         var te = this.elements;
-		te[12] = m.elements[12];
-		te[13] = m.elements[13];
-		te[14] = m.elements[14];
+        var me = m.elements;
+		te[12] = me[12];
+		te[13] = me[13];
+		te[14] = me[14];
 
 
 		return this;
 		return this;
 
 
@@ -2195,24 +2201,25 @@ THREE.Matrix4.prototype = {
 
 
 	extractRotation: function ( m ) {
 	extractRotation: function ( m ) {
         var te = this.elements;
         var te = this.elements;
+        var me = m.elements;
         
         
 		var vector = THREE.Matrix4.__v1;
 		var vector = THREE.Matrix4.__v1;
 
 
-		var scaleX = 1 / vector.set( m.elements[0], m.elements[1], m.elements[2] ).length();
-		var scaleY = 1 / vector.set( m.elements[4], m.elements[5], m.elements[6] ).length();
-		var scaleZ = 1 / vector.set( m.elements[8], m.elements[9], m.elements[10] ).length();
+		var scaleX = 1 / vector.set( me[0], me[1], me[2] ).length();
+		var scaleY = 1 / vector.set( me[4], me[5], me[6] ).length();
+		var scaleZ = 1 / vector.set( me[8], me[9], me[10] ).length();
 
 
-		te[0] = m.elements[0] * scaleX;
-		te[1] = m.elements[1] * scaleX;
-		te[2] = m.elements[2] * scaleX;
+		te[0] = me[0] * scaleX;
+		te[1] = me[1] * scaleX;
+		te[2] = me[2] * scaleX;
 
 
-		te[4] = m.elements[4] * scaleY;
-		te[5] = m.elements[5] * scaleY;
-		te[6] = m.elements[6] * scaleY;
+		te[4] = me[4] * scaleY;
+		te[5] = me[5] * scaleY;
+		te[6] = me[6] * scaleY;
 
 
-		te[8] = m.elements[8] * scaleZ;
-		te[9] = m.elements[9] * scaleZ;
-		te[10] = m.elements[10] * scaleZ;
+		te[8] = me[8] * scaleZ;
+		te[9] = me[9] * scaleZ;
+		te[10] = me[10] * scaleZ;
 
 
 		return this;
 		return this;
 
 

+ 4 - 4
build/custom/ThreeExtras.js

@@ -18660,7 +18660,7 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 					if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 					if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-						object.matrixWorld.flattenToArray( object._objectMatrixArray );
+						//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 						object._modelViewMatrix.multiply( shadowCamera.matrixWorldInverse, object.matrixWorld);
 						object._modelViewMatrix.multiply( shadowCamera.matrixWorldInverse, object.matrixWorld);
 
 
 						webglObject.render = true;
 						webglObject.render = true;
@@ -18725,7 +18725,7 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 					if( object.matrixAutoUpdate ) {
 					if( object.matrixAutoUpdate ) {
 
 
-						object.matrixWorld.flattenToArray( object._objectMatrixArray );
+						//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 					}
 					}
 
 
@@ -19219,7 +19219,7 @@ THREE.DepthPassPlugin = function ( ) {
 
 
 				if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 				if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 					object._modelViewMatrix.multiply( camera.matrixWorldInverse, object.matrixWorld);
 					object._modelViewMatrix.multiply( camera.matrixWorldInverse, object.matrixWorld);
 
 
 					webglObject.render = true;
 					webglObject.render = true;
@@ -19284,7 +19284,7 @@ THREE.DepthPassPlugin = function ( ) {
 
 
 				if( object.matrixAutoUpdate ) {
 				if( object.matrixAutoUpdate ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 				}
 				}
 
 

+ 39 - 32
build/custom/ThreeSVG.js

@@ -958,13 +958,14 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
 
 
 	var i, plane,
 	var i, plane,
 	planes = this.planes;
 	planes = this.planes;
+    var me = m.elements;
 
 
-	planes[ 0 ].set( m.elements[3] - m.elements[0], m.elements[7] - m.elements[4], m.elements[11] - m.elements[8], m.elements[15] - m.elements[12] );
-	planes[ 1 ].set( m.elements[3] + m.elements[0], m.elements[7] + m.elements[4], m.elements[11] + m.elements[8], m.elements[15] + m.elements[12] );
-	planes[ 2 ].set( m.elements[3] + m.elements[1], m.elements[7] + m.elements[5], m.elements[11] + m.elements[9], m.elements[15] + m.elements[13] );
-	planes[ 3 ].set( m.elements[3] - m.elements[1], m.elements[7] - m.elements[5], m.elements[11] - m.elements[9], m.elements[15] - m.elements[13] );
-	planes[ 4 ].set( m.elements[3] - m.elements[2], m.elements[7] - m.elements[6], m.elements[11] - m.elements[10], m.elements[15] - m.elements[14] );
-	planes[ 5 ].set( m.elements[3] + m.elements[2], m.elements[7] + m.elements[6], m.elements[11] + m.elements[10], m.elements[15] + m.elements[14] );
+	planes[ 0 ].set( me[3] - me[0], me[7] - me[4], me[11] - me[8], me[15] - me[12] );
+	planes[ 1 ].set( me[3] + me[0], me[7] + me[4], me[11] + me[8], me[15] + me[12] );
+	planes[ 2 ].set( me[3] + me[1], me[7] + me[5], me[11] + me[9], me[15] + me[13] );
+	planes[ 3 ].set( me[3] - me[1], me[7] - me[5], me[11] - me[9], me[15] - me[13] );
+	planes[ 4 ].set( me[3] - me[2], me[7] - me[6], me[11] - me[10], me[15] - me[14] );
+	planes[ 5 ].set( me[3] + me[2], me[7] + me[6], me[11] + me[10], me[15] + me[14] );
 
 
 	for ( i = 0; i < 6; i ++ ) {
 	for ( i = 0; i < 6; i ++ ) {
 
 
@@ -980,12 +981,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
 	var distance,
 	var distance,
 	planes = this.planes,
 	planes = this.planes,
 	matrix = object.matrixWorld,
 	matrix = object.matrixWorld,
+    me = matrix.elements,
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 
 
 	for ( var i = 0; i < 6; i ++ ) {
 	for ( var i = 0; i < 6; i ++ ) {
 
 
-		distance = planes[ i ].x * matrix.elements[12] + planes[ i ].y * matrix.elements[13] + planes[ i ].z * matrix.elements[14] + planes[ i ].w;
+		distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
 		if ( distance <= radius ) return false;
 		if ( distance <= radius ) return false;
 
 
 	}
 	}
@@ -1621,13 +1623,15 @@ THREE.Matrix4.prototype = {
 	},
 	},
 
 
 	copy: function ( m ) {
 	copy: function ( m ) {
-
+        
+        var me = m.elements;
+        
 		this.set(
 		this.set(
 
 
-			m.elements[0], m.elements[4], m.elements[8], m.elements[12],
-			m.elements[1], m.elements[5], m.elements[9], m.elements[13],
-			m.elements[2], m.elements[6], m.elements[10], m.elements[14],
-			m.elements[3], m.elements[7], m.elements[11], m.elements[15]
+			me[0], me[4], me[8], me[12],
+			me[1], me[5], me[9], me[13],
+			me[2], me[6], me[10], me[14],
+			me[3], me[7], me[11], me[15]
 
 
 		);
 		);
 
 
@@ -1943,11 +1947,12 @@ THREE.Matrix4.prototype = {
 
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
         var te = this.elements;
         var te = this.elements;
-        
-		var n11 = m.elements[0], n12 = m.elements[4], n13 = m.elements[8], n14 = m.elements[12];
-		var n21 = m.elements[1], n22 = m.elements[5], n23 = m.elements[9], n24 = m.elements[13];
-		var n31 = m.elements[2], n32 = m.elements[6], n33 = m.elements[10], n34 = m.elements[14];
-		var n41 = m.elements[3], n42 = m.elements[7], n43 = m.elements[11], n44 = m.elements[15];
+        var me = m.elements;
+                
+		var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+		var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+		var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+		var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
 
 
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
@@ -2185,9 +2190,10 @@ THREE.Matrix4.prototype = {
 
 
 	extractPosition: function ( m ) {
 	extractPosition: function ( m ) {
         var te = this.elements;
         var te = this.elements;
-		te[12] = m.elements[12];
-		te[13] = m.elements[13];
-		te[14] = m.elements[14];
+        var me = m.elements;
+		te[12] = me[12];
+		te[13] = me[13];
+		te[14] = me[14];
 
 
 		return this;
 		return this;
 
 
@@ -2195,24 +2201,25 @@ THREE.Matrix4.prototype = {
 
 
 	extractRotation: function ( m ) {
 	extractRotation: function ( m ) {
         var te = this.elements;
         var te = this.elements;
+        var me = m.elements;
         
         
 		var vector = THREE.Matrix4.__v1;
 		var vector = THREE.Matrix4.__v1;
 
 
-		var scaleX = 1 / vector.set( m.elements[0], m.elements[1], m.elements[2] ).length();
-		var scaleY = 1 / vector.set( m.elements[4], m.elements[5], m.elements[6] ).length();
-		var scaleZ = 1 / vector.set( m.elements[8], m.elements[9], m.elements[10] ).length();
+		var scaleX = 1 / vector.set( me[0], me[1], me[2] ).length();
+		var scaleY = 1 / vector.set( me[4], me[5], me[6] ).length();
+		var scaleZ = 1 / vector.set( me[8], me[9], me[10] ).length();
 
 
-		te[0] = m.elements[0] * scaleX;
-		te[1] = m.elements[1] * scaleX;
-		te[2] = m.elements[2] * scaleX;
+		te[0] = me[0] * scaleX;
+		te[1] = me[1] * scaleX;
+		te[2] = me[2] * scaleX;
 
 
-		te[4] = m.elements[4] * scaleY;
-		te[5] = m.elements[5] * scaleY;
-		te[6] = m.elements[6] * scaleY;
+		te[4] = me[4] * scaleY;
+		te[5] = me[5] * scaleY;
+		te[6] = me[6] * scaleY;
 
 
-		te[8] = m.elements[8] * scaleZ;
-		te[9] = m.elements[9] * scaleZ;
-		te[10] = m.elements[10] * scaleZ;
+		te[8] = me[8] * scaleZ;
+		te[9] = me[9] * scaleZ;
+		te[10] = me[10] * scaleZ;
 
 
 		return this;
 		return this;
 
 

+ 44 - 37
build/custom/ThreeWebGL.js

@@ -958,13 +958,14 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
 
 
 	var i, plane,
 	var i, plane,
 	planes = this.planes;
 	planes = this.planes;
+    var me = m.elements;
 
 
-	planes[ 0 ].set( m.elements[3] - m.elements[0], m.elements[7] - m.elements[4], m.elements[11] - m.elements[8], m.elements[15] - m.elements[12] );
-	planes[ 1 ].set( m.elements[3] + m.elements[0], m.elements[7] + m.elements[4], m.elements[11] + m.elements[8], m.elements[15] + m.elements[12] );
-	planes[ 2 ].set( m.elements[3] + m.elements[1], m.elements[7] + m.elements[5], m.elements[11] + m.elements[9], m.elements[15] + m.elements[13] );
-	planes[ 3 ].set( m.elements[3] - m.elements[1], m.elements[7] - m.elements[5], m.elements[11] - m.elements[9], m.elements[15] - m.elements[13] );
-	planes[ 4 ].set( m.elements[3] - m.elements[2], m.elements[7] - m.elements[6], m.elements[11] - m.elements[10], m.elements[15] - m.elements[14] );
-	planes[ 5 ].set( m.elements[3] + m.elements[2], m.elements[7] + m.elements[6], m.elements[11] + m.elements[10], m.elements[15] + m.elements[14] );
+	planes[ 0 ].set( me[3] - me[0], me[7] - me[4], me[11] - me[8], me[15] - me[12] );
+	planes[ 1 ].set( me[3] + me[0], me[7] + me[4], me[11] + me[8], me[15] + me[12] );
+	planes[ 2 ].set( me[3] + me[1], me[7] + me[5], me[11] + me[9], me[15] + me[13] );
+	planes[ 3 ].set( me[3] - me[1], me[7] - me[5], me[11] - me[9], me[15] - me[13] );
+	planes[ 4 ].set( me[3] - me[2], me[7] - me[6], me[11] - me[10], me[15] - me[14] );
+	planes[ 5 ].set( me[3] + me[2], me[7] + me[6], me[11] + me[10], me[15] + me[14] );
 
 
 	for ( i = 0; i < 6; i ++ ) {
 	for ( i = 0; i < 6; i ++ ) {
 
 
@@ -980,12 +981,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
 	var distance,
 	var distance,
 	planes = this.planes,
 	planes = this.planes,
 	matrix = object.matrixWorld,
 	matrix = object.matrixWorld,
+    me = matrix.elements,
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 
 
 	for ( var i = 0; i < 6; i ++ ) {
 	for ( var i = 0; i < 6; i ++ ) {
 
 
-		distance = planes[ i ].x * matrix.elements[12] + planes[ i ].y * matrix.elements[13] + planes[ i ].z * matrix.elements[14] + planes[ i ].w;
+		distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
 		if ( distance <= radius ) return false;
 		if ( distance <= radius ) return false;
 
 
 	}
 	}
@@ -1621,13 +1623,15 @@ THREE.Matrix4.prototype = {
 	},
 	},
 
 
 	copy: function ( m ) {
 	copy: function ( m ) {
-
+        
+        var me = m.elements;
+        
 		this.set(
 		this.set(
 
 
-			m.elements[0], m.elements[4], m.elements[8], m.elements[12],
-			m.elements[1], m.elements[5], m.elements[9], m.elements[13],
-			m.elements[2], m.elements[6], m.elements[10], m.elements[14],
-			m.elements[3], m.elements[7], m.elements[11], m.elements[15]
+			me[0], me[4], me[8], me[12],
+			me[1], me[5], me[9], me[13],
+			me[2], me[6], me[10], me[14],
+			me[3], me[7], me[11], me[15]
 
 
 		);
 		);
 
 
@@ -1943,11 +1947,12 @@ THREE.Matrix4.prototype = {
 
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
         var te = this.elements;
         var te = this.elements;
-        
-		var n11 = m.elements[0], n12 = m.elements[4], n13 = m.elements[8], n14 = m.elements[12];
-		var n21 = m.elements[1], n22 = m.elements[5], n23 = m.elements[9], n24 = m.elements[13];
-		var n31 = m.elements[2], n32 = m.elements[6], n33 = m.elements[10], n34 = m.elements[14];
-		var n41 = m.elements[3], n42 = m.elements[7], n43 = m.elements[11], n44 = m.elements[15];
+        var me = m.elements;
+                
+		var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+		var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+		var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+		var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
 
 
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
@@ -2185,9 +2190,10 @@ THREE.Matrix4.prototype = {
 
 
 	extractPosition: function ( m ) {
 	extractPosition: function ( m ) {
         var te = this.elements;
         var te = this.elements;
-		te[12] = m.elements[12];
-		te[13] = m.elements[13];
-		te[14] = m.elements[14];
+        var me = m.elements;
+		te[12] = me[12];
+		te[13] = me[13];
+		te[14] = me[14];
 
 
 		return this;
 		return this;
 
 
@@ -2195,24 +2201,25 @@ THREE.Matrix4.prototype = {
 
 
 	extractRotation: function ( m ) {
 	extractRotation: function ( m ) {
         var te = this.elements;
         var te = this.elements;
+        var me = m.elements;
         
         
 		var vector = THREE.Matrix4.__v1;
 		var vector = THREE.Matrix4.__v1;
 
 
-		var scaleX = 1 / vector.set( m.elements[0], m.elements[1], m.elements[2] ).length();
-		var scaleY = 1 / vector.set( m.elements[4], m.elements[5], m.elements[6] ).length();
-		var scaleZ = 1 / vector.set( m.elements[8], m.elements[9], m.elements[10] ).length();
+		var scaleX = 1 / vector.set( me[0], me[1], me[2] ).length();
+		var scaleY = 1 / vector.set( me[4], me[5], me[6] ).length();
+		var scaleZ = 1 / vector.set( me[8], me[9], me[10] ).length();
 
 
-		te[0] = m.elements[0] * scaleX;
-		te[1] = m.elements[1] * scaleX;
-		te[2] = m.elements[2] * scaleX;
+		te[0] = me[0] * scaleX;
+		te[1] = me[1] * scaleX;
+		te[2] = me[2] * scaleX;
 
 
-		te[4] = m.elements[4] * scaleY;
-		te[5] = m.elements[5] * scaleY;
-		te[6] = m.elements[6] * scaleY;
+		te[4] = me[4] * scaleY;
+		te[5] = me[5] * scaleY;
+		te[6] = me[6] * scaleY;
 
 
-		te[8] = m.elements[8] * scaleZ;
-		te[9] = m.elements[9] * scaleZ;
-		te[10] = m.elements[10] * scaleZ;
+		te[8] = me[8] * scaleZ;
+		te[9] = me[9] * scaleZ;
+		te[10] = me[10] * scaleZ;
 
 
 		return this;
 		return this;
 
 
@@ -11403,7 +11410,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 				if ( ! ( object instanceof THREE.Mesh || object instanceof THREE.ParticleSystem ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 				if ( ! ( object instanceof THREE.Mesh || object instanceof THREE.ParticleSystem ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 					setupMatrices( object, camera );
 					setupMatrices( object, camera );
 
 
@@ -11453,7 +11460,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 				if( object.matrixAutoUpdate ) {
 				if( object.matrixAutoUpdate ) {
 
 
-					object.matrixWorld.flattenToArray( object._objectMatrixArray );
+					//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 				}
 				}
 
 
@@ -11864,7 +11871,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			object._modelViewMatrixArray = new Float32Array( 16 );
 			object._modelViewMatrixArray = new Float32Array( 16 );
 			object._objectMatrixArray = new Float32Array( 16 );
 			object._objectMatrixArray = new Float32Array( 16 );
 
 
-			object.matrixWorld.flattenToArray( object._objectMatrixArray );
+			//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 			if ( object instanceof THREE.Mesh ) {
 			if ( object instanceof THREE.Mesh ) {
 
 
@@ -15318,7 +15325,7 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 					if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 					if ( ! ( object instanceof THREE.Mesh ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
 
-						object.matrixWorld.flattenToArray( object._objectMatrixArray );
+						//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 						object._modelViewMatrix.multiply( shadowCamera.matrixWorldInverse, object.matrixWorld);
 						object._modelViewMatrix.multiply( shadowCamera.matrixWorldInverse, object.matrixWorld);
 
 
 						webglObject.render = true;
 						webglObject.render = true;
@@ -15383,7 +15390,7 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 					if( object.matrixAutoUpdate ) {
 					if( object.matrixAutoUpdate ) {
 
 
-						object.matrixWorld.flattenToArray( object._objectMatrixArray );
+						//object.matrixWorld.flattenToArray( object._objectMatrixArray );
 
 
 					}
 					}
 
 

+ 9 - 7
src/core/Frustum.js

@@ -22,13 +22,14 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
 
 
 	var i, plane,
 	var i, plane,
 	planes = this.planes;
 	planes = this.planes;
+    var me = m.elements;
 
 
-	planes[ 0 ].set( m.elements[3] - m.elements[0], m.elements[7] - m.elements[4], m.elements[11] - m.elements[8], m.elements[15] - m.elements[12] );
-	planes[ 1 ].set( m.elements[3] + m.elements[0], m.elements[7] + m.elements[4], m.elements[11] + m.elements[8], m.elements[15] + m.elements[12] );
-	planes[ 2 ].set( m.elements[3] + m.elements[1], m.elements[7] + m.elements[5], m.elements[11] + m.elements[9], m.elements[15] + m.elements[13] );
-	planes[ 3 ].set( m.elements[3] - m.elements[1], m.elements[7] - m.elements[5], m.elements[11] - m.elements[9], m.elements[15] - m.elements[13] );
-	planes[ 4 ].set( m.elements[3] - m.elements[2], m.elements[7] - m.elements[6], m.elements[11] - m.elements[10], m.elements[15] - m.elements[14] );
-	planes[ 5 ].set( m.elements[3] + m.elements[2], m.elements[7] + m.elements[6], m.elements[11] + m.elements[10], m.elements[15] + m.elements[14] );
+	planes[ 0 ].set( me[3] - me[0], me[7] - me[4], me[11] - me[8], me[15] - me[12] );
+	planes[ 1 ].set( me[3] + me[0], me[7] + me[4], me[11] + me[8], me[15] + me[12] );
+	planes[ 2 ].set( me[3] + me[1], me[7] + me[5], me[11] + me[9], me[15] + me[13] );
+	planes[ 3 ].set( me[3] - me[1], me[7] - me[5], me[11] - me[9], me[15] - me[13] );
+	planes[ 4 ].set( me[3] - me[2], me[7] - me[6], me[11] - me[10], me[15] - me[14] );
+	planes[ 5 ].set( me[3] + me[2], me[7] + me[6], me[11] + me[10], me[15] + me[14] );
 
 
 	for ( i = 0; i < 6; i ++ ) {
 	for ( i = 0; i < 6; i ++ ) {
 
 
@@ -44,12 +45,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
 	var distance,
 	var distance,
 	planes = this.planes,
 	planes = this.planes,
 	matrix = object.matrixWorld,
 	matrix = object.matrixWorld,
+    me = matrix.elements,
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	scale = THREE.Frustum.__v1.set( matrix.getColumnX().length(), matrix.getColumnY().length(), matrix.getColumnZ().length() ),
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 	radius = - object.geometry.boundingSphere.radius * Math.max( scale.x, Math.max( scale.y, scale.z ) );
 
 
 	for ( var i = 0; i < 6; i ++ ) {
 	for ( var i = 0; i < 6; i ++ ) {
 
 
-		distance = planes[ i ].x * matrix.elements[12] + planes[ i ].y * matrix.elements[13] + planes[ i ].z * matrix.elements[14] + planes[ i ].w;
+		distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
 		if ( distance <= radius ) return false;
 		if ( distance <= radius ) return false;
 
 
 	}
 	}

+ 30 - 25
src/core/Matrix4.js

@@ -56,13 +56,15 @@ THREE.Matrix4.prototype = {
 	},
 	},
 
 
 	copy: function ( m ) {
 	copy: function ( m ) {
-
+        
+        var me = m.elements;
+        
 		this.set(
 		this.set(
 
 
-			m.elements[0], m.elements[4], m.elements[8], m.elements[12],
-			m.elements[1], m.elements[5], m.elements[9], m.elements[13],
-			m.elements[2], m.elements[6], m.elements[10], m.elements[14],
-			m.elements[3], m.elements[7], m.elements[11], m.elements[15]
+			me[0], me[4], me[8], me[12],
+			me[1], me[5], me[9], me[13],
+			me[2], me[6], me[10], me[14],
+			me[3], me[7], me[11], me[15]
 
 
 		);
 		);
 
 
@@ -378,11 +380,12 @@ THREE.Matrix4.prototype = {
 
 
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
 		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
         var te = this.elements;
         var te = this.elements;
-        
-		var n11 = m.elements[0], n12 = m.elements[4], n13 = m.elements[8], n14 = m.elements[12];
-		var n21 = m.elements[1], n22 = m.elements[5], n23 = m.elements[9], n24 = m.elements[13];
-		var n31 = m.elements[2], n32 = m.elements[6], n33 = m.elements[10], n34 = m.elements[14];
-		var n41 = m.elements[3], n42 = m.elements[7], n43 = m.elements[11], n44 = m.elements[15];
+        var me = m.elements;
+                
+		var n11 = me[0], n12 = me[4], n13 = me[8], n14 = me[12];
+		var n21 = me[1], n22 = me[5], n23 = me[9], n24 = me[13];
+		var n31 = me[2], n32 = me[6], n33 = me[10], n34 = me[14];
+		var n41 = me[3], n42 = me[7], n43 = me[11], n44 = me[15];
 
 
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[0] = n23*n34*n42 - n24*n33*n42 + n24*n32*n43 - n22*n34*n43 - n23*n32*n44 + n22*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
 		te[4] = n14*n33*n42 - n13*n34*n42 - n14*n32*n43 + n12*n34*n43 + n13*n32*n44 - n12*n33*n44;
@@ -620,9 +623,10 @@ THREE.Matrix4.prototype = {
 
 
 	extractPosition: function ( m ) {
 	extractPosition: function ( m ) {
         var te = this.elements;
         var te = this.elements;
-		te[12] = m.elements[12];
-		te[13] = m.elements[13];
-		te[14] = m.elements[14];
+        var me = m.elements;
+		te[12] = me[12];
+		te[13] = me[13];
+		te[14] = me[14];
 
 
 		return this;
 		return this;
 
 
@@ -630,24 +634,25 @@ THREE.Matrix4.prototype = {
 
 
 	extractRotation: function ( m ) {
 	extractRotation: function ( m ) {
         var te = this.elements;
         var te = this.elements;
+        var me = m.elements;
         
         
 		var vector = THREE.Matrix4.__v1;
 		var vector = THREE.Matrix4.__v1;
 
 
-		var scaleX = 1 / vector.set( m.elements[0], m.elements[1], m.elements[2] ).length();
-		var scaleY = 1 / vector.set( m.elements[4], m.elements[5], m.elements[6] ).length();
-		var scaleZ = 1 / vector.set( m.elements[8], m.elements[9], m.elements[10] ).length();
+		var scaleX = 1 / vector.set( me[0], me[1], me[2] ).length();
+		var scaleY = 1 / vector.set( me[4], me[5], me[6] ).length();
+		var scaleZ = 1 / vector.set( me[8], me[9], me[10] ).length();
 
 
-		te[0] = m.elements[0] * scaleX;
-		te[1] = m.elements[1] * scaleX;
-		te[2] = m.elements[2] * scaleX;
+		te[0] = me[0] * scaleX;
+		te[1] = me[1] * scaleX;
+		te[2] = me[2] * scaleX;
 
 
-		te[4] = m.elements[4] * scaleY;
-		te[5] = m.elements[5] * scaleY;
-		te[6] = m.elements[6] * scaleY;
+		te[4] = me[4] * scaleY;
+		te[5] = me[5] * scaleY;
+		te[6] = me[6] * scaleY;
 
 
-		te[8] = m.elements[8] * scaleZ;
-		te[9] = m.elements[9] * scaleZ;
-		te[10] = m.elements[10] * scaleZ;
+		te[8] = me[8] * scaleZ;
+		te[9] = me[9] * scaleZ;
+		te[10] = me[10] * scaleZ;
 
 
 		return this;
 		return this;