source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/src/math/Frustum.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 3.5 KB
Line 
1/**
2 * @author mrdoob / http://mrdoob.com/
3 * @author alteredq / http://alteredqualia.com/
4 * @author bhouston / http://exocortex.com
5 */
6
7THREE.Frustum = function ( p0, p1, p2, p3, p4, p5 ) {
8
9 this.planes = [
10
11 ( p0 !== undefined ) ? p0 : new THREE.Plane(),
12 ( p1 !== undefined ) ? p1 : new THREE.Plane(),
13 ( p2 !== undefined ) ? p2 : new THREE.Plane(),
14 ( p3 !== undefined ) ? p3 : new THREE.Plane(),
15 ( p4 !== undefined ) ? p4 : new THREE.Plane(),
16 ( p5 !== undefined ) ? p5 : new THREE.Plane()
17
18 ];
19
20};
21
22THREE.Frustum.prototype = {
23
24 constructor: THREE.Frustum,
25
26 set: function ( p0, p1, p2, p3, p4, p5 ) {
27
28 var planes = this.planes;
29
30 planes[0].copy( p0 );
31 planes[1].copy( p1 );
32 planes[2].copy( p2 );
33 planes[3].copy( p3 );
34 planes[4].copy( p4 );
35 planes[5].copy( p5 );
36
37 return this;
38
39 },
40
41 copy: function ( frustum ) {
42
43 var planes = this.planes;
44
45 for( var i = 0; i < 6; i ++ ) {
46
47 planes[i].copy( frustum.planes[i] );
48
49 }
50
51 return this;
52
53 },
54
55 setFromMatrix: function ( m ) {
56
57 var planes = this.planes;
58 var me = m.elements;
59 var me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];
60 var me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];
61 var me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];
62 var me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];
63
64 planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();
65 planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();
66 planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();
67 planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();
68 planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();
69 planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();
70
71 return this;
72
73 },
74
75 intersectsObject: function () {
76
77 var sphere = new THREE.Sphere();
78
79 return function ( object ) {
80
81 var geometry = object.geometry;
82
83 if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
84
85 sphere.copy( geometry.boundingSphere );
86 sphere.applyMatrix4( object.matrixWorld );
87
88 return this.intersectsSphere( sphere );
89
90 };
91
92 }(),
93
94 intersectsSphere: function ( sphere ) {
95
96 var planes = this.planes;
97 var center = sphere.center;
98 var negRadius = -sphere.radius;
99
100 for ( var i = 0; i < 6; i ++ ) {
101
102 var distance = planes[ i ].distanceToPoint( center );
103
104 if ( distance < negRadius ) {
105
106 return false;
107
108 }
109
110 }
111
112 return true;
113
114 },
115
116 intersectsBox : function() {
117
118 var p1 = new THREE.Vector3(),
119 p2 = new THREE.Vector3();
120
121 return function( box ) {
122
123 var planes = this.planes;
124
125 for ( var i = 0; i < 6 ; i ++ ) {
126
127 var plane = planes[i];
128
129 p1.x = plane.normal.x > 0 ? box.min.x : box.max.x;
130 p2.x = plane.normal.x > 0 ? box.max.x : box.min.x;
131 p1.y = plane.normal.y > 0 ? box.min.y : box.max.y;
132 p2.y = plane.normal.y > 0 ? box.max.y : box.min.y;
133 p1.z = plane.normal.z > 0 ? box.min.z : box.max.z;
134 p2.z = plane.normal.z > 0 ? box.max.z : box.min.z;
135
136 var d1 = plane.distanceToPoint( p1 );
137 var d2 = plane.distanceToPoint( p2 );
138
139 // if both outside plane, no intersection
140
141 if ( d1 < 0 && d2 < 0 ) {
142
143 return false;
144
145 }
146 }
147
148 return true;
149 };
150
151 }(),
152
153
154 containsPoint: function ( point ) {
155
156 var planes = this.planes;
157
158 for ( var i = 0; i < 6; i ++ ) {
159
160 if ( planes[ i ].distanceToPoint( point ) < 0 ) {
161
162 return false;
163
164 }
165
166 }
167
168 return true;
169
170 },
171
172 clone: function () {
173
174 return new THREE.Frustum().copy( this );
175
176 }
177
178};
Note: See TracBrowser for help on using the repository browser.