X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_volumes.h;h=2d84e9e00ac8f2f2454a095f97f52a7e203ce7d1;hb=bececcbb7b2e886e72425e7c070e1fdc3aa126dc;hp=450c8c2cc2a7f147bc251d1bee65a64894b2a676;hpb=2e4531dfd7bd0d9a0776fda1a62653806d85eb3b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_volumes.h b/world_volumes.h index 450c8c2..2d84e9e 100644 --- a/world_volumes.h +++ b/world_volumes.h @@ -1,66 +1,5 @@ -#ifndef WORLD_VOLUMES_H -#define WORLD_VOLUMES_H - +#pragma once #include "world.h" +#include "vg/vg_bvh.h" -/* - * BVH implementation - * ---------------------------------------------------------------------------- - */ - -VG_STATIC void volume_vg_expand_bound( void *user, boxf bound, u32 item_index ) -{ - world_instance *world = user; - struct world_volume *volume = &world->volumes[ item_index ]; - - m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f, 1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f, 1.0f,-1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f,-1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){ 1.0f,-1.0f,-1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f, 1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f, 1.0f,-1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f,-1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->transform, bound, (v3f){-1.0f,-1.0f,-1.0f} ); -} - -VG_STATIC float volume_vg_centroid( void *user, u32 item_index, int axis ) -{ - world_instance *world = user; - struct world_volume *volume = &world->volumes[ item_index ]; - - return volume->transform[3][axis]; -} - -VG_STATIC void volume_vg_swap( void *user, u32 ia, u32 ib ) -{ - world_instance *world = user; - struct world_volume *a = &world->volumes[ ia ], - *b = &world->volumes[ ib ], - temp; - - temp = *a; - *a = *b; - *b = temp; -} - -VG_STATIC void volume_vg_debug( void *user, u32 item_index ) -{ - world_instance *world = user; - struct world_volume *zone = &world->volumes[ item_index ]; - - vg_line_boxf_transformed( zone->transform, (boxf){{-1.0f,-1.0f,-1.0f}, - { 1.0f, 1.0f, 1.0f}}, - 0xff00ff00 ); -} - -VG_STATIC bh_system bh_system_volumes = -{ - .expand_bound = volume_vg_expand_bound, - .item_centroid = volume_vg_centroid, - .item_closest = NULL, - .item_swap = volume_vg_swap, - .item_debug = volume_vg_debug, - .cast_ray = NULL -}; - -#endif /* WORLD_VOLUMES_H */ +void world_volumes_update( world_instance *world, v3f pos );