--- ray/src/common/octree.h 1990/09/06 23:32:39 1.3 +++ ray/src/common/octree.h 2003/02/25 02:47:21 2.6 @@ -1,13 +1,10 @@ -/* Copyright (c) 1986 Regents of the University of California */ - -/* SCCSid "$SunId$ LBL" */ - +/* RCSid $Id: octree.h,v 2.6 2003/02/25 02:47:21 greg Exp $ */ /* * octree.h - header file for routines using octrees. - * - * 7/28/85 */ +#include "copyright.h" + /* * An octree is expressed as an integer which is either * an index to eight other nodes, the empty tree, or an index @@ -20,7 +17,9 @@ * < -1: it is an index to a set of objects */ -typedef int OCTREE; +#ifndef OCTREE +#define OCTREE int +#endif #define EMPTY (-1) @@ -29,17 +28,22 @@ typedef int OCTREE; #define istree(ot) ((ot) > EMPTY) #define oseti(ot) (-(ot)-2) /* object set index */ -#define octbi(ot) ((ot)>>8) /* octree block index */ -#define octti(ot) (((ot)&0377)<<3)/* octree index in block */ +#define OCTBLKSIZ 04000 /* octree block size */ +#define octbi(ot) ((ot)>>11) /* octree block index */ +#define octti(ot) (((ot)&03777)<<3)/* octree index in block */ +#ifndef MAXOBLK +#ifdef BIGMEM +#define MAXOBLK 32767 /* maximum octree block */ +#else #define MAXOBLK 4095 /* maximum octree block */ +#endif +#endif extern OCTREE *octblock[MAXOBLK]; /* octree blocks */ #define octkid(ot,br) (octblock[octbi(ot)][octti(ot)+br]) -extern OCTREE octalloc(), combine(), fullnode(); - /* * The cube structure is used to hold an octree and its cubic * boundaries. @@ -61,8 +65,11 @@ extern CUBE thescene; /* the main scene */ #define IO_FILES 010 /* object file names */ #define IO_BOUNDS 020 /* octree boundary */ #define IO_ALL (~0) /* everything */ + /* octree format identifier */ +#define OCTFMT "Radiance_octree" /* magic number for octree files */ -#define OCTMAGIC (283+sizeof(OBJECT)) +#define MAXOBJSIZ 8 /* maximum sizeof(OBJECT) */ +#define OCTMAGIC ( 4 *MAXOBJSIZ+251) /* increment first value */ /* octree node types */ #define OT_EMPTY 0 #define OT_FULL 1 @@ -71,3 +78,29 @@ extern CUBE thescene; /* the main scene */ #define O_MISS 0 /* no intersection */ #define O_HIT 1 /* intersection */ #define O_IN 2 /* cube contained entirely */ + +#ifdef NOPROTO + +extern OCTREE octalloc(); +extern void octfree(); +extern void octdone(); +extern OCTREE combine(); +extern void culocate(); +extern void cucopy(); +extern int incube(); + +extern int readoct(); + +#else + +extern OCTREE octalloc(void); +extern void octfree(OCTREE ot); +extern void octdone(void); +extern OCTREE combine(OCTREE ot); +extern void culocate(CUBE *cu, FVECT pt); +extern void cucopy(CUBE *cu1, CUBE *cu2); +extern int incube(CUBE *cu, FVECT pt); + +extern int readoct(char *fname, int load, CUBE *scene, char *ofn[]); + +#endif