X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=bvh.h;h=52ce24ab75e39175923ab95a00e508882349afe8;hb=7e7dddda61cb3ccef02dbefd06a9cbaf39a94581;hp=e79e3ddc6866ab7d012bfd30952d0fc8eebc3230;hpb=2a238d32da833812e837cf38e16a7685c98db5c3;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/bvh.h b/bvh.h index e79e3dd..52ce24a 100644 --- 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; tcount; 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 ) {