gem5/splash2/codes/apps/raytrace/bbox.C

102 lines
2.6 KiB
C
Raw Normal View History

/*************************************************************************/
/* */
/* Copyright (c) 1994 Stanford University */
/* */
/* All rights reserved. */
/* */
/* Permission is given to use, copy, and modify this software for any */
/* non-commercial purpose as long as this copyright notice is not */
/* removed. All other uses, including redistribution in whole or in */
/* part, are forbidden without prior written permission. */
/* */
/* This software is provided with absolutely no warranty and no */
/* support. */
/* */
/*************************************************************************/
/*
* NAME
* bbox.c
*
* DESCRIPTION
* This file contains routines that read, inquire, and normalize bounding
* boxes.
*/
#include <stdio.h>
#include <math.h>
#include "rt.h"
/*
* NAME
* InquireBoundBoxValues - return min and max bound values for each coordinate axis
*
* SYNOPSIS
* VOID InquireBoundBoxValues(pbb, minx, miny, minz, maxx, maxy, maxz)
* BBOX *pbb; // Ptr to bounding box.
* REAL *minx, *miny, *minz; // Near planes.
* REAL *maxx, *maxy, *maxz; // Far planes.
*
* RETURNS
* Nothing.
*/
VOID InquireBoundBoxValues(BBOX *pbb, REAL *minx, REAL *miny, REAL *minz, REAL *maxx, REAL *maxy, REAL *maxz)
{
*minx = pbb->dnear[0];
*miny = pbb->dnear[1];
*minz = pbb->dnear[2];
*maxx = pbb->dfar[0];
*maxy = pbb->dfar[1];
*maxz = pbb->dfar[2];
}
/*
* NAME
* NormalizeBoundBox - normalize bounding box given a normalization matrix
*
* SYNOPSIS
* VOID NormalizeBoundBox(bv, mat)
* BBOX *pbb; // Ptr to bounding box.
* MATRIX mat; // Normalization matrix.
*
* RETURNS
* Nothing.
*/
VOID NormalizeBoundBox(BBOX *pbb, MATRIX mat)
{
POINT tmp;
/* dnear and dfar are only vectors of length 3 */
tmp[0] = pbb->dnear[0];
tmp[1] = pbb->dnear[1];
tmp[2] = pbb->dnear[2];
tmp[3] = 1.0;
VecMatMult(tmp, mat, tmp);
pbb->dnear[0] = tmp[0];
pbb->dnear[1] = tmp[1];
pbb->dnear[2] = tmp[2];
tmp[0] = pbb->dfar[0];
tmp[1] = pbb->dfar[1];
tmp[2] = pbb->dfar[2];
tmp[3] = 1.0;
VecMatMult(tmp, mat, tmp);
pbb->dfar[0] = tmp[0];
pbb->dfar[1] = tmp[1];
pbb->dfar[2] = tmp[2];
}