}
VG_STATIC int ray_world( world_instance *world,
- v3f pos, v3f dir, ray_hit *hit )
+ v3f pos, v3f dir, ray_hit *hit, u16 ignore )
{
- return scene_raycast( &world->scene_geo, world->geo_bh, pos, dir, hit );
+ return scene_raycast( &world->scene_geo, world->geo_bh, pos, dir, hit,
+ ignore );
}
/*
* Cast a sphere from a to b and see what time it hits
*/
VG_STATIC int spherecast_world( world_instance *world,
- v3f pa, v3f pb, float r, float *t, v3f n )
+ v3f pa, v3f pb, float r, float *t, v3f n,
+ u16 ignore )
{
boxf region;
box_init_inf( region );
i32 idx;
while( bh_next( world->geo_bh, &it, &idx ) ){
u32 *ptri = &world->scene_geo.arrindices[ idx*3 ];
- v3f tri[3];
+ if( world->scene_geo.arrvertices[ptri[0]].flags & ignore ) continue;
+ v3f tri[3];
boxf box;
box_init_inf( box );
-
for( int j=0; j<3; j++ ){
v3_copy( world->scene_geo.arrvertices[ptri[j]].co, tri[j] );
box_addpt( box, tri[j] );