|
@@ -1,18 +1,19 @@
|
|
|
/**
|
|
|
* @author mrdoob / http://mrdoob.com/
|
|
|
* @author alteredq / http://alteredqualia.com/
|
|
|
+ * @author Ben Houston / [email protected] / http://github.com/bhouston
|
|
|
*/
|
|
|
|
|
|
THREE.Frustum = function ( ) {
|
|
|
|
|
|
this.planes = [
|
|
|
|
|
|
- new THREE.Vector4(),
|
|
|
- new THREE.Vector4(),
|
|
|
- new THREE.Vector4(),
|
|
|
- new THREE.Vector4(),
|
|
|
- new THREE.Vector4(),
|
|
|
- new THREE.Vector4()
|
|
|
+ new THREE.Plane(),
|
|
|
+ new THREE.Plane(),
|
|
|
+ new THREE.Plane(),
|
|
|
+ new THREE.Plane(),
|
|
|
+ new THREE.Plane(),
|
|
|
+ new THREE.Plane()
|
|
|
|
|
|
];
|
|
|
|
|
@@ -29,18 +30,15 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
|
|
|
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 ].set( me3 - me0, me7 - me4, me11 - me8, me15 - me12 );
|
|
|
- planes[ 1 ].set( me3 + me0, me7 + me4, me11 + me8, me15 + me12 );
|
|
|
- planes[ 2 ].set( me3 + me1, me7 + me5, me11 + me9, me15 + me13 );
|
|
|
- planes[ 3 ].set( me3 - me1, me7 - me5, me11 - me9, me15 - me13 );
|
|
|
- planes[ 4 ].set( me3 - me2, me7 - me6, me11 - me10, me15 - me14 );
|
|
|
- planes[ 5 ].set( me3 + me2, me7 + me6, me11 + me10, me15 + me14 );
|
|
|
+ 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 ++ ) {
|
|
|
-
|
|
|
- plane = planes[ i ];
|
|
|
- plane.divideScalar( Math.sqrt( plane.x * plane.x + plane.y * plane.y + plane.z * plane.z ) );
|
|
|
-
|
|
|
+ planes[ i ].normalize();
|
|
|
}
|
|
|
|
|
|
};
|
|
@@ -50,12 +48,12 @@ THREE.Frustum.prototype.contains = function ( object ) {
|
|
|
var distance = 0.0;
|
|
|
var planes = this.planes;
|
|
|
var matrix = object.matrixWorld;
|
|
|
- var me = matrix.elements;
|
|
|
+ var matrixPosition = matrix.getPosition();
|
|
|
var radius = - object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis();
|
|
|
|
|
|
for ( var i = 0; i < 6; i ++ ) {
|
|
|
|
|
|
- distance = planes[ i ].x * me[12] + planes[ i ].y * me[13] + planes[ i ].z * me[14] + planes[ i ].w;
|
|
|
+ distance = planes[ i ].distanceToPoint( matrixPosition );
|
|
|
if ( distance <= radius ) return false;
|
|
|
|
|
|
}
|