When recursion has reached a maximum number of subdivisionsįunction = OcTree (points ) binDepths = % Initialize an array of bin depths with this single base-level bin binParents = % This base level bin is not a child of other bins binCorners = % It surrounds all points in XYZ space pointBins (:) = 1 % Initially, all points are assigned to this first bin divide ( 1 ) % Begin dividing this first bin function divide (binNo ) % If this bin meets any exit conditions, do not divide it any further.When a bin reaches a minimum size or volume based on the length of its edges.When a bin contains fewer than a given number of points.
#ZMODELER 3 LOCKING FUNCTION CODE#
Examples of such exit conditions (shown in code below) are: Recursion is stopped when a given exit condition is met. The implementation begins with a single bin surrounding all given points, which then recursively subdivides into its 8 octree regions. The example recursive algorithm outline below ( MATLAB syntax) decomposes an array of 3-dimensional points into octree style bins. Once sampling is complete, exploring all routes in the tree down to the leaf nodes, taking note of the bits along the way, will yield approximately the required number of colors. If much more than the desired number of palette colors are entered into the octree, its size can be continually reduced by seeking out a bottom-level node and averaging its bit data up into a leaf node, pruning part of the tree. The bottom level of the octree consists of leaf nodes that accrue color data not represented in the tree these nodes initially contain single bits. The algorithm is highly memory efficient because the tree's size can be limited. Less significant bits are sometimes ignored to reduce the tree size. The next lower level uses the next bit significance, and so on. The node index to branch out from at the top level is determined by a formula that uses the most significant bits of the red, green, and blue color components, e.g. Octrees are used because 2 3 = 8 and there are three color components in the RGB system. The octree color quantization algorithm, invented by Gervautz and Purgathofer in 1988, encodes image color data as an octree up to nine levels deep. Efficient collision detection in three dimensionsĪpplication to color quantization.Level of detail rendering in 3D computer graphics.The use of octrees for 3D computer graphics was pioneered by Donald Meagher at Rensselaer Polytechnic Institute, described in a 1980 report "Octree Encoding: A New Technique for the Representation, Manipulation and Display of Arbitrary 3-D Objects by Computer", for which he holds a 1995 patent (with a 1984 priority date) "High-speed image generation of complex solid objects using octree encoding" Common uses Also k-d trees are always binary, which is not the case for octrees.īy using a depth-first search the nodes are to be traversed and only required surfaces are to be viewed. Note that Octrees are not the same as k-d trees: k-d trees split along a dimension and octrees split around a point. The root node of a PR octree can represent infinite space the root node of an MX octree must represent a finite bounded space so that the implicit centers are well-defined. In a matrix based (MX) octree, the subdivision point is implicitly the center of the space the node represents. In a point region (PR) octree, the node stores an explicit three-dimensional point, which is the "center" of the subdivision for that node the point defines one of the corners for each of the eight children. 5 Implementation for point decompositionĮach node in an octree subdivides the space it represents into eight octants.