Frustum.js 1.6 KB
Newer Older
A
alteredq 已提交
1 2 3
/**
 * @author mrdoob / http://mrdoob.com/
 * @author alteredq / http://alteredqualia.com/
B
Ben Houston 已提交
4
 * @author bhouston / http://exocortex.com
A
alteredq 已提交
5 6 7 8 9 10
 */

THREE.Frustum = function ( ) {

	this.planes = [

11 12 13 14 15 16
		new THREE.Plane(),
		new THREE.Plane(),
		new THREE.Plane(),
		new THREE.Plane(),
		new THREE.Plane(),
		new THREE.Plane()
A
alteredq 已提交
17 18 19 20 21 22 23

	];

};

THREE.Frustum.prototype.setFromMatrix = function ( m ) {

M
Mr.doob 已提交
24
	var planes = this.planes;
25 26 27 28 29 30

	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];
M
Mr.doob 已提交
31

32 33 34 35 36 37
	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 );
A
alteredq 已提交
38

M
Mr.doob 已提交
39
	for ( var i = 0; i < 6; i ++ ) {
A
alteredq 已提交
40

41
		planes[ i ].normalize();
A
alteredq 已提交
42

A
alteredq 已提交
43 44 45 46 47 48
	}

};

THREE.Frustum.prototype.contains = function ( object ) {

M
Mr.doob 已提交
49
	var planes = this.planes;
A
alteredq 已提交
50

M
Mr.doob 已提交
51
	var matrix = object.matrixWorld;
52
	var matrixPosition = matrix.getPosition();
M
Mr.doob 已提交
53
	var radius = - object.geometry.boundingSphere.radius * matrix.getMaxScaleOnAxis();
A
alteredq 已提交
54

A
alteredq 已提交
55 56
	var distance = 0.0;

A
alteredq 已提交
57 58
	for ( var i = 0; i < 6; i ++ ) {

59
		distance = planes[ i ].distanceToPoint( matrixPosition );
A
alteredq 已提交
60 61 62 63 64 65 66 67
		if ( distance <= radius ) return false;

	}

	return true;

};

68
THREE.Frustum.__v1 = new THREE.Vector3();