6 using namespace GFXMatrices;
37 for (p = 0; p < 6; p++) {
39 d = f[p][0]*Cnt.i+f[p][1]*Cnt.j+f[p][2]*Cnt.k+f[p][3];
60 int OrCodes = 0, AndCodes = ~0;
61 for (
int i = 0;
i < 8;
i++) {
62 Vector v( min.i, min.j, min.k );
63 if (
i&1) v.i = (max.i);
64 if (
i&2) v.j = (max.j);
65 if (
i&4) v.k = (max.k);
69 for (
int j = 0;
j < 6;
j++, Bit <<= 1)
70 if (v.i*f[
j][0]+v.j*f[
j][1]+v.k*f[
j][2]+f[
j][3] < 0)
80 else if (AndCodes != 0)
106 for (
unsigned int i = 0;
i < 4;
i++) {
107 Vector n( f[
i][0], f[i][1], f[i][2] );
108 Vector r( 9284, -3259, -1249 );
150 for (p = 0; p < 5; p++) {
152 d = f[p][0]*Cnt.i+f[p][1]*Cnt.j+f[p][2]*Cnt.k+f[p][3];
164 static float nnear, ffar, left, right, bot, top;
202 dest[0] = m1[0]*(double) m2.
r[0]+m1[4]*(
double) m2.
r[1]+m1[8]*(double) m2.
r[2];
203 dest[1] = m1[1]*(
double) m2.
r[0]+m1[5]*(double) m2.
r[1]+m1[9]*(
double) m2.
r[2];
204 dest[2] = m1[2]*(double) m2.
r[0]+m1[6]*(
double) m2.
r[1]+m1[10]*(double) m2.
r[2];
205 dest[3] = m1[3]*(
double) m2.
r[0]+m1[7]*(double) m2.
r[1]+m1[11]*(
double) m2.
r[2];
207 dest[4] = m1[0]*(double) m2.
r[3]+m1[4]*(
double) m2.
r[4]+m1[8]*(double) m2.
r[5];
208 dest[5] = m1[1]*(
double) m2.
r[3]+m1[5]*(double) m2.
r[4]+m1[9]*(
double) m2.
r[5];
209 dest[6] = m1[2]*(double) m2.
r[3]+m1[6]*(
double) m2.
r[4]+m1[10]*(double) m2.
r[5];
210 dest[7] = m1[3]*(
double) m2.
r[3]+m1[7]*(double) m2.
r[4]+m1[11]*(
double) m2.
r[5];
212 dest[8] = m1[0]*(double) m2.
r[6]+m1[4]*(
double) m2.
r[7]+m1[8]*(double) m2.
r[8];
213 dest[9] = m1[1]*(
double) m2.
r[6]+m1[5]*(double) m2.
r[7]+m1[9]*(
double) m2.
r[8];
214 dest[10] = m1[2]*(double) m2.
r[6]+m1[6]*(
double) m2.
r[7]+m1[10]*(double) m2.
r[8];
215 dest[11] = m1[3]*(
double) m2.
r[6]+m1[7]*(double) m2.
r[7]+m1[11]*(
double) m2.
r[8];
217 dest[12] = m1[0]*p.i+m1[4]*p.j+m1[8]*p.k+m1[12];
218 dest[13] = m1[1]*p.i+m1[5]*p.j+m1[9]*p.k+m1[13];
219 dest[14] = m1[2]*p.i+m1[6]*p.j+m1[10]*p.k+m1[14];
220 dest[15] = m1[3]*p.i+m1[7]*p.j+m1[11]*p.k+m1[15];
229 frustum[0][0] = clip[3]-clip[0];
230 frustum[0][1] = clip[7]-clip[4];
231 frustum[0][2] = clip[11]-clip[8];
232 frustum[0][3] = clip[15]-clip[12];
235 t =
sqrt( frustum[0][0]*frustum[0][0]+frustum[0][1]*frustum[0][1]+frustum[0][2]*frustum[0][2] );
242 frustum[1][0] = clip[3]+clip[0];
243 frustum[1][1] = clip[7]+clip[4];
244 frustum[1][2] = clip[11]+clip[8];
245 frustum[1][3] = clip[15]+clip[12];
248 t =
sqrt( frustum[1][0]*frustum[1][0]+frustum[1][1]*frustum[1][1]+frustum[1][2]*frustum[1][2] );
255 frustum[2][0] = clip[3]+clip[1];
256 frustum[2][1] = clip[7]+clip[5];
257 frustum[2][2] = clip[11]+clip[9];
258 frustum[2][3] = clip[15]+clip[13];
261 t =
sqrt( frustum[2][0]*frustum[2][0]+frustum[2][1]*frustum[2][1]+frustum[2][2]*frustum[2][2] );
268 frustum[3][0] = clip[3]-clip[1];
269 frustum[3][1] = clip[7]-clip[5];
270 frustum[3][2] = clip[11]-clip[9];
271 frustum[3][3] = clip[15]-clip[13];
274 t =
sqrt( frustum[3][0]*frustum[3][0]+frustum[3][1]*frustum[3][1]+frustum[3][2]*frustum[3][2] );
281 frustum[5][0] = clip[3]-clip[2];
282 frustum[5][1] = clip[7]-clip[6];
283 frustum[5][2] = clip[11]-clip[10];
284 frustum[5][3] = clip[15]-clip[14];
287 t =
sqrt( frustum[5][0]*frustum[5][0]+frustum[5][1]*frustum[5][1]+frustum[5][2]*frustum[5][2] );
294 frustum[4][0] = clip[3]+clip[2];
295 frustum[4][1] = clip[7]+clip[6];
296 frustum[4][2] = clip[11]+clip[10];
297 frustum[4][3] = clip[15]+clip[14];
300 t =
sqrt( frustum[4][0]*frustum[4][0]+frustum[4][1]*frustum[4][1]+frustum[4][2]*frustum[4][2] );
322 float left, right, bottom, top, nearval, farval;
325 float xs = 2*nearval/(right-left);
326 float a = (right+left)/(right-left);
333 return fabs( hx/hw );
339 frustum[0][0] = -clip.r[0];
340 frustum[0][1] = -clip.r[3];
341 frustum[0][2] = -clip.r[6];
342 frustum[0][3] = 1-clip.p.i;
345 t =
sqrt( frustum[0][0]*frustum[0][0]+frustum[0][1]*frustum[0][1]+frustum[0][2]*frustum[0][2] );
352 frustum[1][0] = +clip.r[0];
353 frustum[1][1] = +clip.r[3];
354 frustum[1][2] = +clip.r[6];
355 frustum[1][3] = 1+clip.p.i;
358 t =
sqrt( frustum[1][0]*frustum[1][0]+frustum[1][1]*frustum[1][1]+frustum[1][2]*frustum[1][2] );
365 frustum[2][0] = +clip.r[1];
366 frustum[2][1] = +clip.r[4];
367 frustum[2][2] = +clip.r[7];
368 frustum[2][3] = 1+clip.p.j;
371 t =
sqrt( frustum[2][0]*frustum[2][0]+frustum[2][1]*frustum[2][1]+frustum[2][2]*frustum[2][2] );
378 frustum[2][0] = -clip.r[1];
379 frustum[2][1] = -clip.r[4];
380 frustum[2][2] = -clip.r[7];
381 frustum[2][3] = 1-clip.p.j;
384 t =
sqrt( frustum[3][0]*frustum[3][0]+frustum[3][1]*frustum[3][1]+frustum[3][2]*frustum[3][2] );
391 frustum[5][0] = -clip.r[2];
392 frustum[5][1] = -clip.r[5];
393 frustum[5][2] = -clip.r[8];
394 frustum[5][3] = 1-clip.p.k;
397 t =
sqrt( frustum[5][0]*frustum[5][0]+frustum[5][1]*frustum[5][1]+frustum[5][2]*frustum[5][2] );
404 frustum[4][0] = +clip.r[2];
405 frustum[4][1] = +clip.r[5];
406 frustum[4][2] = +clip.r[8];
407 frustum[4][3] = 1+clip.p.k;
410 t =
sqrt( frustum[4][0]*frustum[4][0]+frustum[4][1]*frustum[4][1]+frustum[4][2]*frustum[4][2] );