Implement Mat4x4::WorldX/Y/Z/IsFinite
This commit is contained in:
@@ -20,6 +20,7 @@ namespace LinearAlgebra {
|
|||||||
*/
|
*/
|
||||||
class Matrix4x4 {
|
class Matrix4x4 {
|
||||||
public:
|
public:
|
||||||
|
// TODO: Implement assertions to ensure matrix bounds are not violated!
|
||||||
enum { Rows = 4 };
|
enum { Rows = 4 };
|
||||||
enum { Cols = 4 };
|
enum { Cols = 4 };
|
||||||
|
|
||||||
@@ -80,6 +81,9 @@ namespace LinearAlgebra {
|
|||||||
|
|
||||||
Vector4 GetRow(int index) const;
|
Vector4 GetRow(int index) const;
|
||||||
Vector4 GetColumn(int index) const;
|
Vector4 GetColumn(int index) const;
|
||||||
|
Vector3 GetRow3(int index) const;
|
||||||
|
|
||||||
|
Vector3 GetColumn3(int index) const;
|
||||||
float &At(int row, int col);
|
float &At(int row, int col);
|
||||||
float At(int x, int y) const;
|
float At(int x, int y) const;
|
||||||
|
|
||||||
@@ -154,9 +158,9 @@ namespace LinearAlgebra {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Vector2 operator * (const Vector2& rhs) const { return this->Transform(rhs);}
|
Vector2 operator * (const Vector2& rhs) const;
|
||||||
Vector3 operator * (const Vector3& rhs) const { return this->Transform(rhs);}
|
Vector3 operator * (const Vector3& rhs) const;
|
||||||
Vector4 operator * (const Vector4& rhs) const { return this->Transform(rhs);}
|
Vector4 operator * (const Vector4& rhs) const;
|
||||||
|
|
||||||
Matrix4x4 operator * (const Matrix3x3 &rhs) const;
|
Matrix4x4 operator * (const Matrix3x3 &rhs) const;
|
||||||
|
|
||||||
|
@@ -374,4 +374,34 @@ namespace LinearAlgebra {
|
|||||||
Vector3 Matrix4x4::Diagonal3() const {
|
Vector3 Matrix4x4::Diagonal3() const {
|
||||||
return Vector3 { At(0, 0), At(1,1), At(2,2) };
|
return Vector3 { At(0, 0), At(1,1), At(2,2) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector4 Matrix4x4::WorldX() const {
|
||||||
|
return GetColumn3(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector4 Matrix4x4::WorldY() const {
|
||||||
|
return GetColumn3(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector4 Matrix4x4::WorldZ() const {
|
||||||
|
return GetColumn3(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Matrix4x4::IsFinite() const {
|
||||||
|
for(int iy = 0; iy < Rows; ++iy)
|
||||||
|
for(int ix = 0; ix < Cols; ++ix)
|
||||||
|
if (!std::isfinite(elems[iy][ix]))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 Matrix4x4::GetColumn3(int index) const {
|
||||||
|
return Vector3{At(0, index), At(1, index), At(2, index)};
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 Matrix4x4::operator*(const Vector2 &rhs) const { return this->Transform(rhs);}
|
||||||
|
|
||||||
|
Vector3 Matrix4x4::operator*(const Vector3 &rhs) const { return this->Transform(rhs);}
|
||||||
|
|
||||||
|
Vector4 Matrix4x4::operator*(const Vector4 &rhs) const { return this->Transform(rhs);}
|
||||||
}
|
}
|
Reference in New Issue
Block a user