The Octree object
We will implement the acceleration structure of our Scene
as an Octree
. This acceleration structure will look very similar to the BVH of a model. The similarity exists because we implemented the BVH of the model as an Octree as well. There are other structures we could use, but an Octree is very common for general 3D spatial partitioning.
Getting ready
In this section, we are going to create the OctreeNode
support structure. This struct
represents a single node of an Octree. Leaf nodes can be empty, or they may contain a list of models that are contained within the node. Non-leaf nodes contain exactly eight child nodes. We are also going to implement a SplitTree
helper function that will recursively subdivide an octree node.
How to do it…
Follow these steps to implement a simple Octree
:
- Declare the
OctreeNode
structure inScene.h
:typedef struct OctreeNode { AABB bounds; OctreeNode* children; std::vector<Model*> models; inline OctreeNode() : children...