fixed BBBZZZT
[carveJwlIkooP6JGAAIwe30JlM.git] / bvh.h
diff --git a/bvh.h b/bvh.h
index e79e3ddc6866ab7d012bfd30952d0fc8eebc3230..52ce24ab75e39175923ab95a00e508882349afe8 100644 (file)
--- a/bvh.h
+++ b/bvh.h
@@ -90,7 +90,6 @@ VG_STATIC void bh_subdivide( bh_tree *bh, u32 inode )
    if( extent[2] > extent[axis] ) axis = 2;
 
    float split = node->bbx[0][axis] + extent[axis]*0.5f;
-
    float avg = 0.0;
    for( u32 t=0; t<node->count; t++ )
    {
@@ -98,9 +97,9 @@ VG_STATIC void bh_subdivide( bh_tree *bh, u32 inode )
       avg += bh->system->item_centroid( bh->user, idx, axis );
    }
    avg /= (float)node->count;
-
    split = avg;
 
+
    i32 i = node->start,
        j = i + node->count-1;
    
@@ -232,11 +231,16 @@ VG_STATIC int bh_ray( bh_tree *bh, v3f co, v3f dir, ray_hit *hit )
    stack[0] = 0;
    stack[1] = bh->nodes[0].il;
    stack[2] = bh->nodes[0].ir;
+
+   v3f dir_inv;
+   dir_inv[0] = 1.0f/dir[0];
+   dir_inv[1] = 1.0f/dir[1];
+   dir_inv[2] = 1.0f/dir[2];
    
    while(depth)
    {
       bh_node *inode = &bh->nodes[ stack[depth] ];
-      if( ray_aabb( inode->bbx, co, dir, hit->dist ) )
+      if( ray_aabb1( inode->bbx, co, dir_inv, hit->dist ) )
       {
          if( inode->count )
          {