prime/include/Kyoto/Math/CAABox.hpp

108 lines
2.6 KiB
C++
Raw Normal View History

#ifndef _CAABOX
#define _CAABOX
2022-07-26 04:36:32 +00:00
#include "Kyoto/Math/CVector3f.hpp"
class CInputStream;
class CLineSeg;
class CPlane;
class CTransform4f;
class CTri;
2022-07-26 04:36:32 +00:00
class CAABox {
2022-08-13 01:26:00 +00:00
public:
enum EBoxEdgeId {
kE_Z0,
kE_X0,
kE_Z1,
kE_X1,
kE_Z2,
kE_X2,
kE_Z3,
kE_X3,
kE_Y0,
kE_Y1,
kE_Y2,
kE_Y3,
};
enum EBoxFaceId {
kF_YMin,
kF_YMax,
kF_XMin,
kF_XMax,
kF_ZMax,
kF_ZMin,
};
CAABox(const CVector3f& min, const CVector3f& max);
CAABox(float minX, float minY, float minZ, float maxX, float maxY, float maxZ)
: min(minX, minY, minZ), max(maxX, maxY, maxZ) {}
CAABox(CInputStream& in);
2022-09-21 05:18:07 +00:00
// CAABox(const CAABox& other)
// : min(other.min)
// , max(other.max) {}
2022-09-21 05:18:07 +00:00
// CAABox& operator=(const CAABox& other) {
// min = other.min;
// max = other.max;
// return *this;
// }
2022-08-16 02:14:28 +00:00
CLineSeg GetEdge(EBoxEdgeId edge) const;
CTri GetTri(EBoxFaceId face, int windOffset) const;
2022-08-16 02:14:28 +00:00
CVector3f ClosestPointAlongVector(const CVector3f& vec) const;
CVector3f FurthestPointAlongVector(const CVector3f& vec) const;
2022-10-01 20:39:52 +00:00
CVector3f GetCenterPoint() const;
CVector3f GetPoint(int) const;
2022-09-29 05:30:20 +00:00
// Include__6CAABoxFRC9CVector3f weak
// Include__6CAABoxFRC6CAABox weak
void AccumulateBounds(const CVector3f&);
2022-10-01 20:39:52 +00:00
bool Invalid() const;
bool PointInside(const CVector3f& vec) const;
bool DoBoundsOverlap(const CAABox&) const;
float GetVolume() const;
2022-10-01 20:39:52 +00:00
CAABox GetBooleanIntersection(const CAABox& other) const;
bool Inside(const CAABox& other) const;
bool InsidePlane(const CPlane& plane) const;
CVector3f ClampToBox(const CVector3f& vec) const;
CAABox GetTransformedAABox(const CTransform4f& xf) const;
2022-09-29 05:30:20 +00:00
inline CVector3f GetExtents() const {
// Name is a guess
return (max - min) * 0.5f;
}
2022-10-01 20:39:52 +00:00
const CVector3f& GetMinPoint() const { return min; }
const CVector3f& GetMaxPoint() const { return max; }
2022-09-29 05:30:20 +00:00
// GetPointA__6CAABoxCFv weak
// GetPointB__6CAABoxCFv weak
// GetPointC__6CAABoxCFv weak
// GetPointD__6CAABoxCFv weak
// GetPointE__6CAABoxCFv weak
// GetPointF__6CAABoxCFv weak
// GetPointG__6CAABoxCFv weak
// GetPointH__6CAABoxCFv weak
// GetWidth__6CAABoxCFv weak
// GetDepth__6CAABoxCFv weak
// GetHeight__6CAABoxCFv weak
// GetTri__6CAABoxCFii weak
// GetEdge__6CAABoxCFi weak
2022-09-21 05:18:07 +00:00
static const CAABox& Identity() { return mskNullBox; }
static const CAABox& MakeMaxInvertedBox() { return mskInvertedBox; }
2022-09-29 05:30:20 +00:00
// MakeNullBox__6CAABoxFv ??
static float DistanceBetween(const CAABox& a, const CAABox& b);
2022-08-13 01:26:00 +00:00
private:
2022-09-29 05:30:20 +00:00
CVector3f min;
CVector3f max;
2022-09-21 05:18:07 +00:00
static CAABox mskInvertedBox;
static CAABox mskNullBox;
2022-07-26 04:36:32 +00:00
};
2022-08-13 01:26:00 +00:00
CHECK_SIZEOF(CAABox, 0x18)
2022-07-26 04:36:32 +00:00
#endif // _CAABOX