Change project structure;
Added new c# binding;
This commit is contained in:
75
native/header/Geometry/AABB.h
Normal file
75
native/header/Geometry/AABB.h
Normal file
@@ -0,0 +1,75 @@
|
||||
#ifndef AABB_H
|
||||
#define AABB_H
|
||||
|
||||
#include "cglm/struct/vec3.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vec3s min;
|
||||
vec3s max;
|
||||
} aabb_t;
|
||||
|
||||
inline aabb_t invalid_aabb()
|
||||
{
|
||||
return (aabb_t){
|
||||
.min = {FLT_MAX, FLT_MAX, FLT_MAX},
|
||||
.max = {-FLT_MAX, -FLT_MAX, -FLT_MAX},
|
||||
};
|
||||
}
|
||||
|
||||
inline void aabb_growth(aabb_t* aabb, vec3s point)
|
||||
{
|
||||
aabb->min = glms_vec3_minv(aabb->min, point);
|
||||
aabb->max = glms_vec3_maxv(aabb->max, point);
|
||||
}
|
||||
|
||||
inline void aabb_growth_min_max(aabb_t* aabb, vec3s min, vec3s max)
|
||||
{
|
||||
aabb->min = glms_vec3_minv(aabb->min, min);
|
||||
aabb->max = glms_vec3_maxv(aabb->max, max);
|
||||
}
|
||||
|
||||
inline bool aabb_eq(aabb_t a, aabb_t b)
|
||||
{
|
||||
return glms_vec3_eqv(a.min, b.min) && glms_vec3_eqv(a.max, b.max);
|
||||
}
|
||||
|
||||
inline bool aabb_is_valid(aabb_t aabb)
|
||||
{
|
||||
return aabb.max.x >= aabb.min.x && aabb.max.y >= aabb.min.y && aabb.max.z >= aabb.min.z;
|
||||
}
|
||||
|
||||
inline aabb_t aabb_union(aabb_t a, aabb_t b)
|
||||
{
|
||||
if (!aabb_is_valid(a) && !aabb_is_valid(b))
|
||||
{
|
||||
return invalid_aabb();
|
||||
}
|
||||
else if (!aabb_is_valid(a))
|
||||
{
|
||||
return b;
|
||||
}
|
||||
else if (!aabb_is_valid(b))
|
||||
{
|
||||
return a;
|
||||
}
|
||||
|
||||
aabb_t result;
|
||||
result.min = glms_vec3_minv(a.min, b.min);
|
||||
result.max = glms_vec3_maxv(a.max, b.max);
|
||||
return result;
|
||||
}
|
||||
|
||||
inline float aabb_surface_area(aabb_t aabb)
|
||||
{
|
||||
vec3s extent = glms_vec3_sub(aabb.max, aabb.min);
|
||||
return 2.0f * (extent.x * extent.y + extent.x * extent.z + extent.y * extent.z);
|
||||
}
|
||||
|
||||
inline float aabb_volume(aabb_t aabb)
|
||||
{
|
||||
vec3s extent = glms_vec3_sub(aabb.max, aabb.min);
|
||||
return extent.x * extent.y * extent.z;
|
||||
}
|
||||
|
||||
#endif // AABB_H
|
||||
Reference in New Issue
Block a user