aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/matrix.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2016-09-10 18:16:17 +0200
committerEugene Sandulenko2016-09-29 22:33:40 +0200
commitb67bca20b5db7f3d6473341efd7fabfa6532f465 (patch)
tree6fbbd28dc707dac1c3cacde2e8622cceea6d1b0f /engines/bladerunner/matrix.cpp
parent2888d0b3460cdca2dd52f8d6aa94b429d46345ad (diff)
downloadscummvm-rg350-b67bca20b5db7f3d6473341efd7fabfa6532f465.tar.gz
scummvm-rg350-b67bca20b5db7f3d6473341efd7fabfa6532f465.tar.bz2
scummvm-rg350-b67bca20b5db7f3d6473341efd7fabfa6532f465.zip
BLADERUNNER: Pull in changes from madmoose
Diffstat (limited to 'engines/bladerunner/matrix.cpp')
-rw-r--r--engines/bladerunner/matrix.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/engines/bladerunner/matrix.cpp b/engines/bladerunner/matrix.cpp
index fae8e43d19..db4d4d5f9a 100644
--- a/engines/bladerunner/matrix.cpp
+++ b/engines/bladerunner/matrix.cpp
@@ -166,16 +166,20 @@ Matrix4x3 invertMatrix(const Matrix4x3 &m)
return result;
}
-
void Matrix4x3::unknown()
{
- float m14 = _m[0][3];
- float m24 = _m[1][3];
- float m34 = _m[2][3];
+ Matrix4x3 t;
- _m[0][3] = -(m34 * _m[0][2]) - m24 * _m[0][1] - m14 * _m[0][0];
- _m[1][3] = -(m34 * _m[1][2]) - m24 * _m[1][1] - m14 * _m[1][0];
- _m[2][3] = -(m34 * _m[2][2]) - m24 * _m[2][1] - m14 * _m[2][0];
+ // Transpose the 3x3 top left submatrix
+ for (int r = 0; r != 3; ++r)
+ for (int c = 0; c != 3; ++c)
+ t(r, c) = _m[c][r];
+ t(0,3) = -(_m[0][3] * _m[0][0] + _m[1][3] * _m[1][0] + _m[2][3] * _m[2][0]);
+ t(1,3) = -(_m[0][3] * _m[0][1] + _m[1][3] * _m[1][1] + _m[2][3] * _m[2][1]);
+ t(2,3) = -(_m[0][3] * _m[0][2] + _m[1][3] * _m[1][2] + _m[2][3] * _m[2][2]);
+
+ *this = t;
}
+
} // End of namespace BladeRunner