Octree Iteration pseudocode
it(ray, box_origin, box_size): near, far = vec3(0) near, far = AABB_intersection(ray, box_origin, box_size)
old_box_origin = box_origin
it_box_size = box_size / 2
octant, new_center_delta = get_octant(near - box_center)
it_box_center = box_center + new_center_delta * (it_box_size / 2)
base_index = 0
curr_octree_node = get_node(base_index, octant)
for i in range(20):
if curr_octree_node.type == FULL:
return HIT
elif curr_octree_node.type == EMPTY:
return NO_HIT
else:
// Go down 1 level
near, far = AABB_intersect(ray, it_box_center, it_box_size)
octant, new_center_delta = get_octant(near - it_box_center)
it_box_size = it_box_size / 2
it_box_center = it_box_center + new_center_delta * (it_box_size / 2)
curr_octree_node = get_node(curr_octree_node, octant)
Escturura de OCtrees alternativa: 2 Texeles Nodos hijos vacios marcados por un indice de 0 en el padre; y llenos marcados por un 1