2024-04-05 16:07:16 -07:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
struct CVector3f {
|
|
|
|
|
public:
|
|
|
|
|
float x;
|
|
|
|
|
float y;
|
|
|
|
|
float z;
|
|
|
|
|
|
|
|
|
|
inline CVector3f() : x(0), y(0), z(0) {};
|
|
|
|
|
|
|
|
|
|
inline CVector3f(float x, float y, float z) : x(x), y(y), z(z) {};
|
|
|
|
|
};
|
|
|
|
|
|
2024-07-04 15:22:25 -07:00
|
|
|
struct CVector2i {
|
|
|
|
|
public:
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
|
|
|
|
|
inline CVector2i() : x(0), y(0) {};
|
|
|
|
|
|
|
|
|
|
inline CVector2i(int x, int y) : x(x), y(y) {};
|
|
|
|
|
};
|
|
|
|
|
|
2024-04-05 16:07:16 -07:00
|
|
|
struct CQuaternion {
|
|
|
|
|
public:
|
|
|
|
|
float w;
|
|
|
|
|
float x;
|
|
|
|
|
float y;
|
|
|
|
|
float z;
|
|
|
|
|
|
|
|
|
|
inline CQuaternion(float w, float x, float y, float z) : w(w), x(x), y(y), z(z) {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct CAxisAngle : CVector3f {
|
|
|
|
|
inline CAxisAngle() : CVector3f() {}
|
|
|
|
|
inline CAxisAngle(float x, float y, float z) : CVector3f(x, y, z) {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct CScale3f : CVector3f {
|
|
|
|
|
inline CScale3f() : CVector3f() {}
|
|
|
|
|
inline CScale3f(float x, float y, float z) : CVector3f(x, y, z) {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CRelAngle {
|
|
|
|
|
public:
|
|
|
|
|
inline CRelAngle(float theta): theta(theta) {}
|
|
|
|
|
float theta;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CTransform4f {
|
|
|
|
|
public:
|
|
|
|
|
union {
|
|
|
|
|
float matrix[12];
|
|
|
|
|
float mtx[3][4];
|
|
|
|
|
struct {
|
|
|
|
|
float row1[3];
|
|
|
|
|
float x;
|
|
|
|
|
float row2[3];
|
|
|
|
|
float y;
|
|
|
|
|
float row3[3];
|
|
|
|
|
float z;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static constexpr inline CTransform4f Identity() {
|
|
|
|
|
CTransform4f res;
|
|
|
|
|
float mat[16] = {
|
|
|
|
|
1, 0, 0, 0,
|
|
|
|
|
0, 1, 0, 0,
|
|
|
|
|
0, 0, 1, 0,
|
|
|
|
|
0, 0, 0, 1
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
res.matrix[0] = mat[0];
|
|
|
|
|
res.matrix[1] = mat[1];
|
|
|
|
|
res.matrix[2] = mat[2];
|
|
|
|
|
res.matrix[3] = mat[3];
|
|
|
|
|
res.matrix[4] = mat[4];
|
|
|
|
|
res.matrix[5] = mat[5];
|
|
|
|
|
res.matrix[6] = mat[6];
|
|
|
|
|
res.matrix[7] = mat[7];
|
|
|
|
|
res.matrix[8] = mat[8];
|
|
|
|
|
res.matrix[9] = mat[9];
|
|
|
|
|
res.matrix[10] = mat[10];
|
|
|
|
|
res.matrix[11] = mat[11];
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static CTransform4f Translate(float x, float y, float z);
|
|
|
|
|
// CTransform4f RotateX(float theta);
|
|
|
|
|
// CTransform4f RotateY(float theta);
|
|
|
|
|
CTransform4f RotateLocalX(const CRelAngle &theta);
|
|
|
|
|
CTransform4f RotateLocalY(const CRelAngle &theta);
|
|
|
|
|
CTransform4f RotateLocalZ(const CRelAngle &theta);
|
|
|
|
|
void MultiplyRotation(CTransform4f const&) const;
|
|
|
|
|
void MultiplyIgnoreTranslation(const CTransform4f *param_1);
|
|
|
|
|
|
|
|
|
|
CTransform4f operator*(const CTransform4f &rhs) const;
|
|
|
|
|
CVector3f TransposeRotate(CVector3f const&) const;
|
|
|
|
|
CVector3f Rotate(CVector3f const&) const;
|
|
|
|
|
|
|
|
|
|
inline CVector3f origin() { return CVector3f(matrix[3], matrix[3 + 4], matrix[3 + 8]); };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CAABox {
|
|
|
|
|
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);
|
|
|
|
|
// CAABox(const CAABox& other)
|
|
|
|
|
// : min(other.min)
|
|
|
|
|
// , max(other.max) {}
|
|
|
|
|
|
|
|
|
|
// CAABox& operator=(const CAABox& other) {
|
|
|
|
|
// min = other.min;
|
|
|
|
|
// max = other.max;
|
|
|
|
|
// return *this;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// CLineSeg GetEdge(EBoxEdgeId edge) const;
|
|
|
|
|
// CTri GetTri(EBoxFaceId face, int windOffset) const;
|
|
|
|
|
CVector3f ClosestPointAlongVector(const CVector3f& vec) const;
|
|
|
|
|
CVector3f FurthestPointAlongVector(const CVector3f& vec) const;
|
|
|
|
|
CVector3f GetCenterPoint() const;
|
|
|
|
|
CVector3f GetPoint(int) const;
|
|
|
|
|
// Include__6CAABoxFRC9CVector3f weak
|
|
|
|
|
// Include__6CAABoxFRC6CAABox weak
|
|
|
|
|
void AccumulateBounds(const CVector3f&);
|
|
|
|
|
bool Invalid() const;
|
|
|
|
|
bool PointInside(const CVector3f& vec) const;
|
|
|
|
|
bool DoBoundsOverlap(const CAABox&) const;
|
|
|
|
|
float GetVolume() const;
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
// inline CVector3f GetHalfExtent() const {
|
|
|
|
|
// // Name is a guess
|
|
|
|
|
// return (max - min) * 0.5f;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
const CVector3f& GetMinPoint() const { return min; }
|
|
|
|
|
const CVector3f& GetMaxPoint() const { return max; }
|
|
|
|
|
|
|
|
|
|
static const CAABox& Identity() { return skZeroBox; }
|
|
|
|
|
static const CAABox& MakeMaxInvertedBox() { return skInvertedBox; }
|
|
|
|
|
// MakeNullBox__6CAABoxFv ??
|
|
|
|
|
static float DistanceBetween(const CAABox& a, const CAABox& b);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
CVector3f min;
|
|
|
|
|
CVector3f max;
|
|
|
|
|
|
|
|
|
|
static CAABox skInvertedBox;
|
|
|
|
|
static CAABox skZeroBox;
|
2024-07-04 15:22:25 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CAABox2i {
|
|
|
|
|
private:
|
|
|
|
|
CVector2i min;
|
|
|
|
|
CVector2i max;
|
2024-07-08 21:21:56 -07:00
|
|
|
};
|
|
|
|
|
|
2024-12-02 00:53:04 -08:00
|
|
|
struct CColor4f {
|
|
|
|
|
float r;
|
|
|
|
|
float g;
|
|
|
|
|
float b;
|
|
|
|
|
float a;
|
|
|
|
|
|
|
|
|
|
inline CColor4f() : r(0), g(0), b(0), a(0) {};
|
|
|
|
|
inline CColor4f(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {};
|
|
|
|
|
};
|
|
|
|
|
|
2024-07-08 21:21:56 -07:00
|
|
|
class CMath {
|
|
|
|
|
public:
|
|
|
|
|
static float CeilingF(float);
|
2024-04-05 16:07:16 -07:00
|
|
|
};
|