| /*************************************************************************/ |
| /* */ |
| /* 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(pbb, minx, miny, minz, maxx, maxy, maxz) |
| BBOX *pbb; |
| REAL *minx, *miny, *minz; |
| REAL *maxx, *maxy, *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(pbb, mat) |
| 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]; |
| } |
| |