frustum.c
1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**************************************************************************
* *
* Copyright (C) 1994, Silicon Graphics, Inc. *
* *
* These coded instructions, statements, and computer programs contain *
* unpublished proprietary information of Silicon Graphics, Inc., and *
* are protected by Federal copyright law. They may not be disclosed *
* to third parties or copied or duplicated in any form, in whole or *
* in part, without the prior written consent of Silicon Graphics, Inc. *
* *
**************************************************************************/
#include "guint.h"
void guFrustumF(float mf[4][4], float l, float r, float b, float t, float n, float f, float scale)
{
int i, j;
guMtxIdentF(mf);
mf[0][0] = 2*n/(r-l);
mf[1][1] = 2*n/(t-b);
mf[2][0] = (r+l)/(r-l);
mf[2][1] = (t+b)/(t-b);
mf[2][2] = -(f+n)/(f-n);
mf[2][3] = -1;
mf[3][2] = -2*f*n/(f-n);
mf[3][3] = 0;
for (i=0; i<4; i++)
for (j=0; j<4; j++)
mf[i][j] *= scale;
}
void guFrustum(Mtx *m, float l, float r, float b, float t, float n, float f, float scale)
{
Matrix mf;
guFrustumF(mf, l, r, b, t, n, f, scale);
guMtxF2L(mf, m);
}