1 |
/* |
2 |
======================================================================= |
3 |
Header for building out-of-core octree data structure |
4 |
|
5 |
Roland Schregle (roland.schregle@{hslu.ch, gmail.com}) |
6 |
(c) Lucerne University of Applied Sciences and Arts, |
7 |
supported by the Swiss National Science Foundation (SNSF, #147053) |
8 |
======================================================================= |
9 |
|
10 |
$Id: oocbuild.h,v 1.5 2015/08/05 17:29:01 taschreg Exp $ |
11 |
*/ |
12 |
|
13 |
|
14 |
#ifndef OOC_BUILD_H |
15 |
#define OOC_BUILD_H |
16 |
|
17 |
/* Bottom-up construction of out-of-core octree in postorder traversal. |
18 |
* The octree oct is assumed to be initialised with its origin (oct -> |
19 |
* org), size (oct -> size), key callback (oct -> key), and its |
20 |
* associated leaf file (oct -> leafFile). |
21 |
|
22 |
* Records are read from the leafFile and assumed to be sorted in |
23 |
* Z-order, which defines an octree leaf ordering. Leaves (terminal |
24 |
* nodes) are constructed such that they contain <= leafMax records and |
25 |
* have a maximum depth of maxDepth. |
26 |
|
27 |
* Note that the following limits apply: |
28 |
* leafMax <= OOC_OCTCNT_MAX (see oococt.h) |
29 |
* maxDepth <= OOC_MORTON_BITS (see oocsort.h) |
30 |
|
31 |
* The maxDepth limit arises from the fact that the Z-ordering has a |
32 |
* limited resolution and will map node coordinates beyond a depth of |
33 |
* OOC_MORTON_BITS to the same Z-index, causing nodes to be potentially |
34 |
* read out of sequence and winding up in the wrong octree nodes. |
35 |
|
36 |
* On success, the octree pointer oct is returned, with the constructed |
37 |
* nodes in oct -> nodes, and the node count in oct -> numNodes. On |
38 |
* failure, NULL is returned. */ |
39 |
OOC_Octree *OOC_Build (OOC_Octree *oct, unsigned leafMax, |
40 |
unsigned maxDepth); |
41 |
#endif |
42 |
|