Implement Matrix4x4::ShearX ShearY ShearZ D3DOrthoProjLH D3DOrthoProjRH D3DPerspProjLH

This commit is contained in:
2024-05-22 12:27:37 -04:00
parent 0c85b8408c
commit d2b51d348c
2 changed files with 136 additions and 31 deletions

View File

@@ -651,9 +651,9 @@ namespace J3ML::LinearAlgebra {
Vector4 Matrix4x4::Row(int i) const { return GetRow(i);}
Vector4 Matrix4x4::Col3(int i) const { return GetColumn3(i);}
Vector3 Matrix4x4::Col3(int i) const { return GetColumn3(i);}
Vector4 Matrix4x4::Row3(int i) const { return GetRow3(i);}
Vector3 Matrix4x4::Row3(int i) const { return GetRow3(i);}
Vector3 Matrix4x4::TransformDir(float tx, float ty, float tz) const
{
@@ -764,4 +764,56 @@ namespace J3ML::LinearAlgebra {
return copy;
}
Vector4 &Matrix4x4::Row(int row) {
assert(row >= 0);
assert(row < Rows);
return reinterpret_cast<Vector4 &> (elems[row]);
}
Vector3 &Matrix4x4::Row3(int row) {
assert(row >= 0);
assert(row < Rows);
return reinterpret_cast<Vector3 &> (elems[row]);
}
Vector4 Matrix4x4::Column(int index) const { return GetColumn(index);}
Vector3 Matrix4x4::GetScale() const {
return Vector3(
GetColumn3(0).Length(),
GetColumn3(1).Length(),
GetColumn3(2).Length());
}
Matrix4x4 Matrix4x4::ShearX(float yFactor, float zFactor) {
return Matrix4x4(1.f, yFactor, zFactor, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f);
}
Matrix4x4 Matrix4x4::ShearY(float xFactor, float zFactor) /// [similarOverload: ShearX] [hideIndex]
{
return Matrix4x4(1.f, 0.f, 0.f, 0.f,
xFactor, 1.f, zFactor, 0.f,
0.f, 0.f, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f);
}
Matrix4x4 Matrix4x4::ShearZ(float xFactor, float yFactor) /// [similarOverload: ShearX] [hideIndex]
{
return Matrix4x4(1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
xFactor, yFactor, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f);
}
Matrix4x4 Matrix4x4::D3DPerspProjLH(float n, float f, float h, float v) {
Matrix4x4 p;
p[0][0] = 2.f * n / h; p[0][1] = 0; p[0][2] = 0; p[0][3] = 0.f;
p[1][0] = 0; p[1][1] = 2.f * n / v; p[1][2] = 0; p[1][3] = 0.f;
p[2][0] = 0; p[2][1] = 0; p[2][2] = f / (f-n); p[2][3] = n * f / (n-f);
p[3][0] = 0; p[3][1] = 0; p[3][2] = 1.f; p[3][3] = 0.f;
}
}