mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-04 20:06:41 +01:00
Common: Add additional Matrix/Vec functions.
This commit is contained in:
parent
d8c62b5965
commit
1e028025e5
@ -84,6 +84,23 @@ Matrix33 Matrix33::RotateZ(float rad)
|
|||||||
return mtx;
|
return mtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Matrix33 Matrix33::Rotate(float rad, const Vec3& axis)
|
||||||
|
{
|
||||||
|
const float s = std::sin(rad);
|
||||||
|
const float c = std::cos(rad);
|
||||||
|
Matrix33 mtx;
|
||||||
|
mtx.data[0] = axis.x * axis.x * (1 - c) + c;
|
||||||
|
mtx.data[1] = axis.x * axis.y * (1 - c) - axis.z * s;
|
||||||
|
mtx.data[2] = axis.x * axis.z * (1 - c) + axis.y * s;
|
||||||
|
mtx.data[3] = axis.y * axis.x * (1 - c) + axis.z * s;
|
||||||
|
mtx.data[4] = axis.y * axis.y * (1 - c) + c;
|
||||||
|
mtx.data[5] = axis.y * axis.z * (1 - c) - axis.x * s;
|
||||||
|
mtx.data[6] = axis.z * axis.x * (1 - c) - axis.y * s;
|
||||||
|
mtx.data[7] = axis.z * axis.y * (1 - c) + axis.x * s;
|
||||||
|
mtx.data[8] = axis.z * axis.z * (1 - c) + c;
|
||||||
|
return mtx;
|
||||||
|
}
|
||||||
|
|
||||||
Matrix33 Matrix33::Scale(const Vec3& vec)
|
Matrix33 Matrix33::Scale(const Vec3& vec)
|
||||||
{
|
{
|
||||||
Matrix33 mtx = {};
|
Matrix33 mtx = {};
|
||||||
|
@ -20,6 +20,10 @@ union TVec3
|
|||||||
TVec3() = default;
|
TVec3() = default;
|
||||||
TVec3(T _x, T _y, T _z) : data{_x, _y, _z} {}
|
TVec3(T _x, T _y, T _z) : data{_x, _y, _z} {}
|
||||||
|
|
||||||
|
TVec3 Cross(const TVec3& rhs) const
|
||||||
|
{
|
||||||
|
return {(y * rhs.z) - (rhs.y * z), (z * rhs.x) - (rhs.z * x), (x * rhs.y) - (rhs.x * y)};
|
||||||
|
}
|
||||||
T Dot(const TVec3& other) const { return x * other.x + y * other.y + z * other.z; }
|
T Dot(const TVec3& other) const { return x * other.x + y * other.y + z * other.z; }
|
||||||
T LengthSquared() const { return Dot(*this); }
|
T LengthSquared() const { return Dot(*this); }
|
||||||
T Length() const { return std::sqrt(LengthSquared()); }
|
T Length() const { return std::sqrt(LengthSquared()); }
|
||||||
@ -275,6 +279,8 @@ public:
|
|||||||
static Matrix33 RotateY(float rad);
|
static Matrix33 RotateY(float rad);
|
||||||
static Matrix33 RotateZ(float rad);
|
static Matrix33 RotateZ(float rad);
|
||||||
|
|
||||||
|
static Matrix33 Rotate(float rad, const Vec3& axis);
|
||||||
|
|
||||||
static Matrix33 Scale(const Vec3& vec);
|
static Matrix33 Scale(const Vec3& vec);
|
||||||
|
|
||||||
// set result = a x b
|
// set result = a x b
|
||||||
|
Loading…
x
Reference in New Issue
Block a user