frustum.c 1.17 KB
/**************************************************************************
 *									  *
 *		 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);
}