mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 07:10:53 -04:00
97 lines
2.0 KiB
C++
97 lines
2.0 KiB
C++
#ifndef NW4R_MATH_GEOMETRY_H
|
|
#define NW4R_MATH_GEOMETRY_H
|
|
#include "nw4r/math/math_types.h"
|
|
#include "nw4r/types_nw4r.h"
|
|
|
|
namespace nw4r {
|
|
namespace math {
|
|
|
|
enum IntersectionResult {
|
|
INTERSECTION_NONE,
|
|
INTERSECTION_1,
|
|
INTERSECTION_2,
|
|
|
|
INTERSECTION_LINE3_ON_PLANE = INTERSECTION_2,
|
|
INTERSECTION_RAY3_ON_PLANE = INTERSECTION_2,
|
|
INTERSECTION_SEGMENT3_ON_PLANE = INTERSECTION_2,
|
|
|
|
INTERSECTION_OUTSIDE = 0,
|
|
INTERSECTION_INSIDE,
|
|
INTERSECTION_INTERSECT
|
|
};
|
|
|
|
struct PLANE {
|
|
PLANE() {}
|
|
|
|
f32 Test(const VEC3 &point) const {
|
|
return d + VEC3Dot(&n, &point);
|
|
}
|
|
void Set(const VEC3 *p0, const VEC3 *p1, const VEC3 *p2);
|
|
|
|
VEC3 n; // at 0x0
|
|
f32 d; // at 0xC
|
|
};
|
|
|
|
struct AABB {
|
|
AABB() {}
|
|
|
|
AABB(const VEC3 &min, const VEC3 &max) : min(min), max(max) {}
|
|
void Set(const VEC3 *points, unsigned int num);
|
|
void Set(const AABB *box, const MTX34 *mtx);
|
|
|
|
VEC3 min; // at 0x0
|
|
VEC3 max; // at 0xC
|
|
};
|
|
|
|
class FRUSTUM {
|
|
private:
|
|
enum Point {
|
|
POINT_NEAR_TL,
|
|
POINT_NEAR_TR,
|
|
POINT_NEAR_BR,
|
|
POINT_NEAR_BL,
|
|
|
|
POINT_FAR_TL,
|
|
POINT_FAR_TR,
|
|
POINT_FAR_BR,
|
|
POINT_FAR_BL,
|
|
|
|
POINT_MAX
|
|
};
|
|
|
|
enum Plane {
|
|
PLANE_L,
|
|
PLANE_R,
|
|
PLANE_N,
|
|
PLANE_F,
|
|
PLANE_T,
|
|
PLANE_B,
|
|
|
|
PLANE_MAX
|
|
};
|
|
|
|
public:
|
|
void Set(f32 fovy, f32 aspect, f32 n, f32 f, const MTX34 &cam);
|
|
void Set(f32 t, f32 b, f32 l, f32 r, f32 n, f32 f, const MTX34 &cam);
|
|
|
|
IntersectionResult IntersectAABB_Ex(const AABB *box) const;
|
|
|
|
private:
|
|
MTX34 mCamMtx; // at 0x0
|
|
PLANE mPlaneL; // at 0x30
|
|
PLANE mPlaneR; // at 0x40
|
|
PLANE mPlaneT; // at 0x50
|
|
PLANE mPlaneB; // at 0x60
|
|
f32 mNearZ; // at 0x70
|
|
f32 mFarZ; // at 0x74
|
|
AABB mBox; // at 0x78
|
|
PLANE mPlanes[PLANE_MAX]; // at 0x90
|
|
};
|
|
|
|
bool IntersectionAABB(const AABB *a, const AABB *b);
|
|
|
|
} // namespace math
|
|
} // namespace nw4r
|
|
|
|
#endif
|