Browse Source

always use local var planes = this.planes in Frustum. fix common include to require Sphere before Frustum.

Ben Houston 12 years ago
parent
commit
c11cdb7f87
2 changed files with 40 additions and 44 deletions
  1. 39 43
      src/math/Frustum.js
  2. 1 1
      utils/includes/common.json

+ 39 - 43
src/math/Frustum.js

@@ -23,12 +23,14 @@ THREE.Frustum.prototype = {
 
 	set: function ( p0, p1, p2, p3, p4, p5 ) {
 
-		this.planes[0].copy( p0 );
-		this.planes[1].copy( p1 );
-		this.planes[2].copy( p2 );
-		this.planes[3].copy( p3 );
-		this.planes[4].copy( p4 );
-		this.planes[5].copy( p5 );
+		var planes = this.planes;
+
+		planes[0].copy( p0 );
+		planes[1].copy( p1 );
+		planes[2].copy( p2 );
+		planes[3].copy( p3 );
+		planes[4].copy( p4 );
+		planes[5].copy( p5 );
 		
 		return this;	
 
@@ -36,9 +38,11 @@ THREE.Frustum.prototype = {
 
 	copy: function ( frustum ) {
 
+		var planes = this.planes;
+	
 		for( var i = 0; i < 6; i ++ ) {
 
-			this.planes[i].copy( frustum.planes[i] );
+			planes[i].copy( frustum.planes[i] );
 
 		}
 
@@ -49,25 +53,18 @@ THREE.Frustum.prototype = {
 	setFromMatrix: function ( m ) {
 
 		var planes = this.planes;
-
 		var me = m.elements;
 		var me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];
 		var me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];
 		var me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];
 		var me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];
 
-		planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 );
-		planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 );
-		planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 );
-		planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 );
-		planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 );
-		planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 );
-
-		for ( var i = 0; i < 6; i ++ ) {
-
-			planes[ i ].normalize();
-
-		}
+		planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();
+		planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();
+		planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();
+		planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();
+		planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();
+		planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();
 
 		return this;
 
@@ -75,30 +72,24 @@ THREE.Frustum.prototype = {
 
 	contains: function ( object ) {
 
-		var planes = this.planes;
-
 		var matrix = object.matrixWorld;
-		var matrixPosition = matrix.getPosition();
-		var radius = - object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis();
 
-		var distance = 0.0;
+		var sphere = THREE.Frustum.__s0.set(
+			matrix.getPosition(), 
+			- object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis()
+			);
 
-		for ( var i = 0; i < 6; i ++ ) {
-
-			distance = planes[ i ].distanceToPoint( matrixPosition );
-			if ( distance <= radius ) return false;
-
-		}
-
-		return true;
+		return this.containsSphere( sphere );
 
 	},
 
 	containsSphere: function ( sphere ) {
 		
+		var planes = this.planes;
+		
 		for ( var i = 0; i < 6; i ++ ) {
 
-			var distance = this.planes[ i ].distanceToPoint( sphere.center );
+			var distance = planes[ i ].distanceToPoint( sphere.center );
 
 			if( distance <= sphere.radius ) {
 
@@ -114,9 +105,11 @@ THREE.Frustum.prototype = {
 
 	containsPoint: function ( point ) {
 		
+		var planes = this.planes;
+
 		for ( var i = 0; i < 6; i ++ ) {
 
-			if( this.planes[ i ].distanceToPoint( point ) < 0 ) {
+			if( planes[ i ].distanceToPoint( point ) < 0 ) {
 
 				return false;
 
@@ -130,12 +123,13 @@ THREE.Frustum.prototype = {
 
 	containsAnyPoints: function ( points ) {
 
-		var p0 = this.planes[ 0 ];
-		var p1 = this.planes[ 1 ];
-		var p2 = this.planes[ 2 ];
-		var p3 = this.planes[ 3 ];
-		var p4 = this.planes[ 4 ];
-		var p5 = this.planes[ 5 ];
+		var planes = this.planes;
+		var p0 = planes[ 0 ];
+		var p1 = planes[ 1 ];
+		var p2 = planes[ 2 ];
+		var p3 = planes[ 3 ];
+		var p4 = planes[ 4 ];
+		var p5 = planes[ 5 ];
 			
 		for( var j = 0, jl = points.length; j < jl; j ++ ) {
 
@@ -175,11 +169,13 @@ THREE.Frustum.prototype = {
 
 	clone: function () {
 
+		var planes = this.planes;
 		return new THREE.Frustum(
-			this.planes[0], this.planes[1], this.planes[2], 
-			this.planes[3], this.planes[4], this.planes[5] );
+			planes[0], planes[1], planes[2], 
+			planes[3], planes[4], planes[5] );
 
 	}
 
 };
 
+THREE.Frustum.__s0 = new THREE.Sphere();

+ 1 - 1
utils/includes/common.json

@@ -9,9 +9,9 @@
 	"../src/math/Matrix3.js",
 	"../src/math/Matrix4.js",
 	"../src/math/Ray.js",
+	"../src/math/Sphere.js",
 	"../src/math/Frustum.js",
 	"../src/math/Plane.js",
-	"../src/math/Sphere.js",
 	"../src/math/Math.js",
 	"../src/math/Quaternion.js",
 	"../src/math/Spline.js",