whole_func_string: function raycastOctant(octant, tx0, ty0, tz0, tx1, ty1, tz1, raycaster, intersects) {
  
  	const children = octant.children;
  
  	let currentOctant;
  	let txm, tym, tzm;
  
  	if(tx1 >= 0.0 && ty1 >= 0.0 && tz1 >= 0.0) {
  
  		if(children === null) {
  
  			// Leaf.
  			intersects.push(octant);
  
  		} else {
  
  			// Compute means.
  			txm = 0.5 * (tx0 + tx1);
  			tym = 0.5 * (ty0 + ty1);
  			tzm = 0.5 * (tz0 + tz1);
  
  			currentOctant = findEntryOctant(tx0, ty0, tz0, txm, tym, tzm);
  
  			do {
  
  				/* The possibilities for the next node are passed in the same respective
  				 * order as the t-values. Hence, if the first value is found to be the
  				 * greatest, the fourth one will be returned. If the second value is the
  				 * greatest, the fifth one will be returned, etc.
  				 */
  
  				switch(currentOctant) {
  
  					case 0:
  						raycastOctant(children[flags], tx0, ty0, tz0, txm, tym, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, tym, tzm);
  						break;
  
  					case 1:
  						raycastOctant(children[flags ^ 1], tx0, ty0, tzm, txm, tym, tz1, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, tym, tz1);
  						break;
  
  					case 2:
  						raycastOctant(children[flags ^ 2], tx0, tym, tz0, txm, ty1, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, ty1, tzm);
  						break;
  
  					case 3:
  						raycastOctant(children[flags ^ 3], tx0, tym, tzm, txm, ty1, tz1, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, ty1, tz1);
  						break;
  
  					case 4:
  						raycastOctant(children[flags ^ 4], txm, ty0, tz0, tx1, tym, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, tx1, tym, tzm);
  						break;
  
  					case 5:
  						raycastOctant(children[flags ^ 5], txm, ty0, tzm, tx1, tym, tz1, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, tx1, tym, tz1);
  						break;
  
  					case 6:
  						raycastOctant(children[flags ^ 6], txm, tym, tz0, tx1, ty1, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, tx1, ty1, tzm);
  						break;
  
  					case 7:
  						raycastOctant(children[flags ^ 7], txm, tym, tzm, tx1, ty1, tz1, raycaster, intersects);
  						// Far top right octant. No other octants can be reached from here.
  						currentOctant = 8;
  						break;
  
  				}
  
  			} while(currentOctant < 8);
  
  		}
  
  	}
  
  }
func_code_string: function raycastOctant(octant, tx0, ty0, tz0, tx1, ty1, tz1, raycaster, intersects) {
  
  	const children = octant.children;
  
  	let currentOctant;
  	let txm, tym, tzm;
  
  	if(tx1 >= 0.0 && ty1 >= 0.0 && tz1 >= 0.0) {
  
  		if(children === null) {
  
  			// Leaf.
  			intersects.push(octant);
  
  		} else {
  
  			// Compute means.
  			txm = 0.5 * (tx0 + tx1);
  			tym = 0.5 * (ty0 + ty1);
  			tzm = 0.5 * (tz0 + tz1);
  
  			currentOctant = findEntryOctant(tx0, ty0, tz0, txm, tym, tzm);
  
  			do {
  
  				/* The possibilities for the next node are passed in the same respective
  				 * order as the t-values. Hence, if the first value is found to be the
  				 * greatest, the fourth one will be returned. If the second value is the
  				 * greatest, the fifth one will be returned, etc.
  				 */
  
  				switch(currentOctant) {
  
  					case 0:
  						raycastOctant(children[flags], tx0, ty0, tz0, txm, tym, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, tym, tzm);
  						break;
  
  					case 1:
  						raycastOctant(children[flags ^ 1], tx0, ty0, tzm, txm, tym, tz1, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, tym, tz1);
  						break;
  
  					case 2:
  						raycastOctant(children[flags ^ 2], tx0, tym, tz0, txm, ty1, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, ty1, tzm);
  						break;
  
  					case 3:
  						raycastOctant(children[flags ^ 3], tx0, tym, tzm, txm, ty1, tz1, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, txm, ty1, tz1);
  						break;
  
  					case 4:
  						raycastOctant(children[flags ^ 4], txm, ty0, tz0, tx1, tym, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, tx1, tym, tzm);
  						break;
  
  					case 5:
  						raycastOctant(children[flags ^ 5], txm, ty0, tzm, tx1, tym, tz1, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, tx1, tym, tz1);
  						break;
  
  					case 6:
  						raycastOctant(children[flags ^ 6], txm, tym, tz0, tx1, ty1, tzm, raycaster, intersects);
  						currentOctant = findNextOctant(currentOctant, tx1, ty1, tzm);
  						break;
  
  					case 7:
  						raycastOctant(children[flags ^ 7], txm, tym, tzm, tx1, ty1, tz1, raycaster, intersects);
  						// Far top right octant. No other octants can be reached from here.
  						currentOctant = 8;
  						break;
  
  				}
  
  			} while(currentOctant < 8);
  
  		}
  
  	}
  
  }
func_documentation_string: Finds all octants that intersect with the given ray.
  
  @private
  @param {Octant} octant - The current octant.
  @param {Number} tx0 - Ray projection parameter. Initial tx0 = (minX - rayOriginX) / rayDirectionX.
  @param {Number} ty0 - Ray projection parameter. Initial ty0 = (minY - rayOriginY) / rayDirectionY.
  @param {Number} tz0 - Ray projection parameter. Initial tz0 = (minZ - rayOriginZ) / rayDirectionZ.
  @param {Number} tx1 - Ray projection parameter. Initial tx1 = (maxX - rayOriginX) / rayDirectionX.
  @param {Number} ty1 - Ray projection parameter. Initial ty1 = (maxY - rayOriginY) / rayDirectionY.
  @param {Number} tz1 - Ray projection parameter. Initial tz1 = (maxZ - rayOriginZ) / rayDirectionZ.
  @param {Raycaster} raycaster - The raycaster.
  @param {Array} intersects - An array to be filled with the intersecting octants.