|
@@ -22,13 +22,18 @@ THREE.Frustum.prototype.setFromMatrix = function ( m ) {
|
|
|
|
|
|
var i, plane,
|
|
|
planes = this.planes;
|
|
|
-
|
|
|
- planes[ 0 ].set( m.n41 - m.n11, m.n42 - m.n12, m.n43 - m.n13, m.n44 - m.n14 );
|
|
|
- planes[ 1 ].set( m.n41 + m.n11, m.n42 + m.n12, m.n43 + m.n13, m.n44 + m.n14 );
|
|
|
- planes[ 2 ].set( m.n41 + m.n21, m.n42 + m.n22, m.n43 + m.n23, m.n44 + m.n24 );
|
|
|
- planes[ 3 ].set( m.n41 - m.n21, m.n42 - m.n22, m.n43 - m.n23, m.n44 - m.n24 );
|
|
|
- planes[ 4 ].set( m.n41 - m.n31, m.n42 - m.n32, m.n43 - m.n33, m.n44 - m.n34 );
|
|
|
- planes[ 5 ].set( m.n41 + m.n31, m.n42 + m.n32, m.n43 + m.n33, m.n44 + m.n34 );
|
|
|
+ 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 ].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 );
|
|
|
|
|
|
for ( i = 0; i < 6; i ++ ) {
|
|
|
|
|
@@ -44,11 +49,13 @@ THREE.Frustum.prototype.contains = function ( object ) {
|
|
|
var distance,
|
|
|
planes = this.planes,
|
|
|
matrix = object.matrixWorld,
|
|
|
- radius = - object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis();
|
|
|
+ me = matrix.elements,
|
|
|
+ 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 ) );
|
|
|
|
|
|
for ( var i = 0; i < 6; i ++ ) {
|
|
|
|
|
|
- distance = planes[ i ].x * matrix.n14 + planes[ i ].y * matrix.n24 + planes[ i ].z * matrix.n34 + 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;
|
|
|
|
|
|
}
|