1 #ifndef WORLD_VOLUMES_H
2 #define WORLD_VOLUMES_H
8 * ----------------------------------------------------------------------------
11 VG_STATIC
void volume_vg_expand_bound( void *user
, boxf bound
, u32 item_index
)
13 world_instance
*world
= user
;
14 struct world_volume
*volume
= &world
->volumes
[ item_index
];
16 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){ 1.0f
, 1.0f
, 1.0f
} );
17 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){ 1.0f
, 1.0f
,-1.0f
} );
18 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){ 1.0f
,-1.0f
, 1.0f
} );
19 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){ 1.0f
,-1.0f
,-1.0f
} );
20 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){-1.0f
, 1.0f
, 1.0f
} );
21 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){-1.0f
, 1.0f
,-1.0f
} );
22 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){-1.0f
,-1.0f
, 1.0f
} );
23 m4x3_expand_aabb_point( volume
->transform
, bound
, (v3f
){-1.0f
,-1.0f
,-1.0f
} );
26 VG_STATIC
float volume_vg_centroid( void *user
, u32 item_index
, int axis
)
28 world_instance
*world
= user
;
29 struct world_volume
*volume
= &world
->volumes
[ item_index
];
31 return volume
->transform
[3][axis
];
34 VG_STATIC
void volume_vg_swap( void *user
, u32 ia
, u32 ib
)
36 world_instance
*world
= user
;
37 struct world_volume
*a
= &world
->volumes
[ ia
],
38 *b
= &world
->volumes
[ ib
],
46 VG_STATIC
void volume_vg_debug( void *user
, u32 item_index
)
48 world_instance
*world
= user
;
49 struct world_volume
*zone
= &world
->volumes
[ item_index
];
51 vg_line_boxf_transformed( zone
->transform
, (boxf
){{-1.0f
,-1.0f
,-1.0f
},
56 VG_STATIC bh_system bh_system_volumes
=
58 .expand_bound
= volume_vg_expand_bound
,
59 .item_centroid
= volume_vg_centroid
,
61 .item_swap
= volume_vg_swap
,
62 .item_debug
= volume_vg_debug
,
66 #endif /* WORLD_VOLUMES_H */