292 {
293 const Node& node= nodes[index];
294 if(node.leaf())
295 {
296 for(int i= node.leaf_begin(); i < node.leaf_end(); i++)
297 triangles[i].intersect(ray);
298 }
299 else
300 {
301 const Node& left_node= nodes[node.left];
302 const Node& right_node= nodes[node.right];
303
304 BBoxHit left= left_node.bounds.intersect(ray, invd);
305 BBoxHit right= right_node.bounds.intersect(ray, invd);
306 if(left && right)
307 {
308 if(left.centroid() < right.centroid())
309 {
310 intersect_fast(node.internal_left(), ray, invd);
311 intersect_fast(node.internal_right(), ray, invd);
312 }
313 else
314 {
315 intersect_fast(node.internal_right(), ray, invd);
316 intersect_fast(node.internal_left(), ray, invd);
317 }
318 }
319 else if(left)
320 intersect_fast(node.internal_left(), ray, invd);
321 else if(right)
322 intersect_fast(node.internal_right(), ray, invd);
323 }
324 }