--- ray/src/common/octree.h 1991/04/18 12:54:26 1.4 +++ ray/src/common/octree.h 2003/06/27 06:53:21 2.10 @@ -1,12 +1,12 @@ -/* Copyright (c) 1986 Regents of the University of California */ - -/* SCCSid "$SunId$ LBL" */ - +/* RCSid $Id: octree.h,v 2.10 2003/06/27 06:53:21 greg Exp $ */ /* * octree.h - header file for routines using octrees. - * - * 7/28/85 */ +#ifndef _RAD_OCTREE_H_ +#define _RAD_OCTREE_H_ +#ifdef __cplusplus +extern "C" { +#endif /* * An octree is expressed as an integer which is either @@ -20,7 +20,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 +31,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 SMLMEM #define MAXOBLK 4095 /* maximum octree block */ +#else +#define MAXOBLK 32767 /* 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. @@ -64,7 +71,8 @@ extern CUBE thescene; /* the main scene */ /* 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 @@ -73,3 +81,24 @@ extern CUBE thescene; /* the main scene */ #define O_MISS 0 /* no intersection */ #define O_HIT 1 /* intersection */ #define O_IN 2 /* cube contained entirely */ + + +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[]); + +extern void readscene(FILE *fp, int objsiz); +extern void writescene(int firstobj, int nobjs, FILE *fp); + + +#ifdef __cplusplus +} +#endif +#endif /* _RAD_OCTREE_H_ */ +