pvert->colour[1] = src->colour[1];
pvert->colour[2] = src->colour[2];
pvert->colour[3] = src->colour[3];
+ pvert->weights[0] = src->weights[0];
+ pvert->weights[1] = src->weights[1];
+ pvert->weights[2] = src->weights[2];
+ pvert->weights[3] = src->weights[3];
v2_copy( src->uv, pvert->uv );
}
return 0;
}
+VG_STATIC void scene_bh_closest( void *user, u32 index, v3f point, v3f closest )
+{
+ scene *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] );
+
+ closest_on_triangle_1( point, positions, closest );
+}
+
VG_STATIC bh_system bh_system_scene =
{
.expand_bound = scene_bh_expand_bound,
.item_centroid = scene_bh_centroid,
+ .item_closest = scene_bh_closest,
.item_swap = scene_bh_swap,
.item_debug = scene_bh_debug,
.cast_ray = scene_bh_ray
VG_STATIC bh_tree *scene_bh_create( void *lin_alloc, scene *s )
{
u32 triangle_count = s->indice_count / 3;
- return bh_create( lin_alloc, &bh_system_scene, s, triangle_count );
+ return bh_create( lin_alloc, &bh_system_scene, s, triangle_count, 2 );
}
#endif