}
}
-#if 0
-VG_STATIC int bh_ray( bh_tree *bh, v3f co, v3f dir, ray_hit *hit ){
- if( bh->node_count < 2 )
- return 0;
-
- int count = 0;
- u32 stack[100];
- u32 depth = 2;
-
- stack[0] = 0;
- stack[1] = bh->nodes[0].il;
- stack[2] = bh->nodes[0].ir;
-
- v3f dir_inv;
- v3_div( (v3f){1.0f,1.0f,1.0f}, dir, dir_inv );
-
- while(depth){
- bh_node *inode = &bh->nodes[ stack[depth] ];
- if( ray_aabb1( inode->bbx, co, dir_inv, hit->dist ) ){
- if( inode->count ){
- for( u32 i=0; i<inode->count; i++ ){
- u32 idx = inode->start+i;
-
- if( bh->system->cast_ray )
- count += bh->system->cast_ray( bh->user, idx, co, dir, hit );
- else
- count ++;
- }
-
- depth --;
- }
- else{
- if( depth+1 >= vg_list_size(stack) ){
- vg_error( "Maximum stack reached!\n" );
- return count;
- }
-
- stack[depth] = inode->il;
- stack[depth+1] = inode->ir;
- depth ++;
- }
- }
- else{
- depth --;
- }
- }
-
- return count;
-}
-#endif
-
typedef struct bh_iter bh_iter;
struct bh_iter{
struct {
vg_line( pc->co, pa->co, 0xff0000ff );
}
-#if 0
-VG_STATIC int scene_bh_ray( void *user, u32 index, v3f co,
- v3f dir, ray_hit *hit )
-{
- scene_context *s = user;
- v3f positions[3];
-
- u32 *tri = &s->arrindices[ index*3 ];
-
- for( int i=0; i<3; i++ )
- v3_copy( s->arrvertices[tri[i]].co, positions[i] );
-
- float t;
- if(ray_tri( positions, co, dir, &t )){
- if( t < hit->dist ){
- hit->dist = t;
- hit->tri = tri;
- return 1;
- }
- }
-
- return 0;
-}
-#endif
-
VG_STATIC void scene_bh_closest( void *user, u32 index, v3f point, v3f closest )
{
scene_context *s = user;