home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 8
/
CDASC08.ISO
/
NEWS
/
RADIANCE
/
SRC
/
COMMON
/
OCTREE.H
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-07
|
2KB
|
85 lines
/* Copyright (c) 1986 Regents of the University of California */
/* SCCSid "@(#)octree.h 2.1 11/12/91 LBL" */
/*
* octree.h - header file for routines using octrees.
*
* 7/28/85
*/
/*
* An octree is expressed as an integer which is either
* an index to eight other nodes, the empty tree, or an index
* to a set of objects. If the octree has a value:
*
* > -1: it is an index to eight other nodes.
*
* -1: it is empty
*
* < -1: it is an index to a set of objects
*/
#ifndef OCTREE
#define OCTREE int
#endif
#define EMPTY (-1)
#define isempty(ot) ((ot) == EMPTY)
#define isfull(ot) ((ot) < EMPTY)
#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 */
#ifndef MAXOBLK
#ifdef BIGMEM
#define MAXOBLK 8191 /* 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.
*/
typedef struct {
OCTREE cutree; /* the octree for this cube */
FVECT cuorg; /* the cube origin */
double cusize; /* the cube size */
} CUBE;
extern CUBE thescene; /* the main scene */
/* flags for reading and writing octrees */
#define IO_CHECK 0 /* verify file type */
#define IO_INFO 01 /* information header */
#define IO_SCENE 02 /* objects */
#define IO_TREE 04 /* octree */
#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 MAXOBJSIZ 8 /* maximum sizeof(OBJECT) */
#define OCTMAGIC ( 4 *MAXOBJSIZ+251) /* increment first value */
/* octree node types */
#define OT_EMPTY 0
#define OT_FULL 1
#define OT_TREE 2
/* return values for surface functions */
#define O_MISS 0 /* no intersection */
#define O_HIT 1 /* intersection */
#define O_IN 2 /* cube contained entirely */