**cxGeoOctreeDefine**- define an octree volume object

#include <cx/Geometry.h>

enum cxGeoSplatType{CX_GEO_SPLAT_POINT,CX_GEO_SPLAT_CONSTANT,CX_GEO_SPLAT_LINEAR,CX_GEO_SPLAT_GAUSSIAN,CX_GEO_SPLAT_TEXTURE};

cxGeo cxGeoOctreeDefine(int nIndices, int *octreeIndex, int numAttributes,float *point, float *voxelSize, float xmin, float ymin, float zmin,float xmax, float ymax, float zmax, float oxmin, float oymin, float ozmin,float oxmax, float oymax, float ozmax, cxGeoSplatType splatType,float splatSize, int radSamples, int aziSamples)

integer CX_GEO_SPLAT_POINTinteger CX_GEO_SPLAT_CONSTANTinteger CX_GEO_SPLAT_LINEARinteger CX_GEO_SPLAT_GAUSSIANinteger CX_GEO_SPLAT_TEXTURE

parameter (CX_GEO_SPLAT_POINT = 0)parameter (CX_GEO_SPLAT_CONSTANT = 1)parameter (CX_GEO_SPLAT_LINEAR = 2)parameter (CX_GEO_SPLAT_GAUSSIAN = 3)parameter (CX_GEO_SPLAT_TEXTURE = 4)

integer function cxGeoOctreeDefine(nIndices,octreeIndex,numAttributes, point,voxelSize, xmin, ymin, zmin,xmax, ymax, zmax,oxmin, oymin, ozmin,oxmax, oymax, ozmax,splatType, splatSize,radSamples, aziSamples)integer nIndices, octreeIndex, numAttributesreal point(3,*), voxelsize(numAttributes)real xmin, ymin, zmin, xmax, ymax, zmaxreal oxmin, oymin, ozmin, oxmax, oymax, ozmaxinteger splatType, radSamples, aziSamplesreal splatSize

- nIndices
- Number of octree encoding indices.
- octreeIndex
- The linear encoding of the volume octree.
- numAttributes
- The number of point and voxelSize attributes.
- point
- An optional array of XYZ triples containing leaf node locations.
- voxelSize
- An optional array of leaf node sizes.
- xmin
- The bounding box x minimum of the volume.
- ymin
- The bounding box y minimum of the volume.
- zmin
- The bounding box z minimum of the volume.
- xmax
- The bounding box x maximum of the volume.
- ymax
- The bounding box y maximum of the volume.
- zmax
- The bounding box z maximum of the volume.
- oxmin
- The bounding box x minimum of the octree.
- oymin
- The bounding box y minimum of the octree.
- ozmin
- The bounding box z minimum of the octree.
- oxmax
- The bounding box x maximum of the octree.
- oymax
- The bounding box y maximum of the octree.
- ozmax
- The bounding box z maximum of the octree.
- splatType
- An enumeration for the type of splat.
- splatSize
- A scale factor for the splat.
- radSamples
- The number of radial samples in the splat.
- aziSamples
- The number of azimuthal samples in the splat.

- Laur, D. and P. Hanrahan. "Hierarchical Splatting: A Progressive Refinement
- Algorithm for Volume Rendering." Computer Graphics 25(4): pp. 285-288.
Briefly, each leaf in the octree contains information about the color, transparency, location, and size of the node. A screen-oriented "splat" is drawn for each leaf node, using this specification.

The octree shape is encoded into the linear array octreeIndex, which is organized as follows:

Each entry of the octree is either a leaf node or a branch. Leaf nodes are represented by a non-negative number whose value indexes into the color, transparency, location, and voxel size of the node. Location and voxel size if specified, are passed through point and voxelSize. Use

`cxGeoColorAdd(3E)`and`cxGeoTransparencyAdd(3E)`to set color and transparency attributes.If the entry is a negative number, then the absolute value of that entry is the relative offset to the eight child nodes of that branch. For example, the first entry in the octree is a branch node whose value is -1 (its children are 1 index away from the current location).

The special leaf node index of zero inhibits drawing of a leaf node, so the first color, transparency, location, and voxel size attributes will be ignored. The total number of indices in octreeIndex should be nIndices.

The numAttributes argument specifies the number of unique attributes in the point and voxelSize arrays (this number should be less than or equal to the number of leaf nodes). point is an array of coordinate triplets (x,y,z) for the location of each leaf node. It can be NULL, in which case the octree is assumed to be uniform, and the location is determined from the bounding box arguments, xmin, ymin, zmin, xmax, ymax, zmax. voxelSize is an array of floats with one value for each voxel. This is a scaling factor for the polygonal splat which is used for all voxels (this can also be NULL, in which case it is assumed to be unity for all voxels).

The splatType can be of the following types, in increasing complexity:

- CX_GEO_SPLAT_POINT
- Draw points at every leaf node. Voxel scaling is done in screen space.
- CX_GEO_SPLAT_CONSTANT
- Draw constant-valued splats. Equivalent to nearest neighbor reconstruction.
- CX_GEO_SPLAT_LINEAR
- Draw a splat whose transparency falls off linearly with the radius.
- CX_GEO_SPLAT_GAUSSIAN
- Draw a splat whose transparency falls off roughly as a Gaussian distribution.
- CX_GEO_SPLAT_TEXTURE
- Draw a textured splat with /usr/explorer/data/image/reconstruction.bw.
splatSize is the size of the splat in world space, unless the splat is of type CX_GEO_SPLAT_POINT in which case it is in pixels. Two arguments govern the tessellation of the splat: radSamples and aziSamples. radSamples is the number of radial samples in the reconstruction function. It should be 1 for CX_GEO_SPLAT_LINEAR and greater than 1 for CX_GEO_SPLAT_GAUSSIAN. The ideal value for CX_GEO_SPLAT_TEXTURE is 1.6. aziSamples is the number of azimuthal samples, which should be 3 or greater and only affects linear or Gaussian reconstruction).

Note that both the bounding box of the volume and the bounding box of the octree are specified independently. This is so that any padding of the data samples, e.g. to a power of two, can be accounted for.

*cxGeoColorAdd(3E), cxGeoTransparencyAdd(3E)*

*Last modified: Mon Nov 6 16:33:15 GMT 2000*

[ Documentation Home ]© The Numerical Algorithms Group Ltd, Oxford UK. 1999

[ Documentation Home ]