Frustum class
@author mrdoob / http://mrdoob.com/ @author alteredq / http://alteredqualia.com/
Ported to Dart from JS by: @author rob silverton / http://www.unwrong.com/
class Frustum {
List<Vector4> planes;
//TODO: where/how should this be instantiated?
static Vector3 ___v1;// = new Vector3.zero();
static Vector3 get __v1 {
if (___v1 == null) {
___v1 = new Vector3.zero();
}
return ___v1;
}
Frustum()
: planes = [
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0)
];
void setFromMatrix( Matrix4 m ) {
var me0 = m[0], me1 = m[1], me2 = m[2], me3 = m[3];
var me4 = m[4], me5 = m[5], me6 = m[6], me7 = m[7];
var me8 = m[8], me9 = m[9], me10 = m[10], me11 = m[11];
var me12 = m[12], me13 = m[13], me14 = m[14], me15 = m[15];
planes[ 0 ].setValues( me3 - me0, me7 - me4, me11 - me8, me15 - me12 );
planes[ 1 ].setValues( me3 + me0, me7 + me4, me11 + me8, me15 + me12 );
planes[ 2 ].setValues( me3 + me1, me7 + me5, me11 + me9, me15 + me13 );
planes[ 3 ].setValues( me3 - me1, me7 - me5, me11 - me9, me15 - me13 );
planes[ 4 ].setValues( me3 - me2, me7 - me6, me11 - me10, me15 - me14 );
planes[ 5 ].setValues( me3 + me2, me7 + me6, me11 + me10, me15 + me14 );
for ( var i = 0; i < 6; i ++ ) {
Vector4 plane = planes[ i ];
double divisor = Math.sqrt( plane.x * plane.x + plane.y * plane.y + plane.z * plane.z );
if (divisor > 0.0) {
plane.scale( 1.0 / divisor);
}
}
}
bool contains( Object3D object ) {
num distance = 0.0;
Matrix4 m = object.matrixWorld;
num radius = - (object as dynamic).geometry.boundingSphere.radius * calcMaxScaleOnAxis(m);
for ( int i = 0; i < 6; i ++ ) {
distance = planes[ i ].x * m[12] + planes[ i ].y * m[13] + planes[ i ].z * m[14] + planes[ i ].w;
if ( distance <= radius ) return false;
}
return true;
}
}
Constructors
new Frustum() #
Creates a new Object instance.
Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.
docs inherited from Object
Frustum()
: planes = [
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0),
new Vector4(0.0, 0.0, 0.0, 1.0)
];
Methods
bool contains(Object3D object) #
bool contains( Object3D object ) {
num distance = 0.0;
Matrix4 m = object.matrixWorld;
num radius = - (object as dynamic).geometry.boundingSphere.radius * calcMaxScaleOnAxis(m);
for ( int i = 0; i < 6; i ++ ) {
distance = planes[ i ].x * m[12] + planes[ i ].y * m[13] + planes[ i ].z * m[14] + planes[ i ].w;
if ( distance <= radius ) return false;
}
return true;
}
void setFromMatrix(Matrix4 m) #
void setFromMatrix( Matrix4 m ) {
var me0 = m[0], me1 = m[1], me2 = m[2], me3 = m[3];
var me4 = m[4], me5 = m[5], me6 = m[6], me7 = m[7];
var me8 = m[8], me9 = m[9], me10 = m[10], me11 = m[11];
var me12 = m[12], me13 = m[13], me14 = m[14], me15 = m[15];
planes[ 0 ].setValues( me3 - me0, me7 - me4, me11 - me8, me15 - me12 );
planes[ 1 ].setValues( me3 + me0, me7 + me4, me11 + me8, me15 + me12 );
planes[ 2 ].setValues( me3 + me1, me7 + me5, me11 + me9, me15 + me13 );
planes[ 3 ].setValues( me3 - me1, me7 - me5, me11 - me9, me15 - me13 );
planes[ 4 ].setValues( me3 - me2, me7 - me6, me11 - me10, me15 - me14 );
planes[ 5 ].setValues( me3 + me2, me7 + me6, me11 + me10, me15 + me14 );
for ( var i = 0; i < 6; i ++ ) {
Vector4 plane = planes[ i ];
double divisor = Math.sqrt( plane.x * plane.x + plane.y * plane.y + plane.z * plane.z );
if (divisor > 0.0) {
plane.scale( 1.0 / divisor);
}
}
}