summaryrefslogtreecommitdiff
path: root/maths.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'maths.cpp')
-rw-r--r--maths.cpp12
1 files changed, 3 insertions, 9 deletions
diff --git a/maths.cpp b/maths.cpp
index 4eae44e..3a08e74 100644
--- a/maths.cpp
+++ b/maths.cpp
@@ -178,9 +178,9 @@ m4f m4f::orth(float l, float r, float b, float t, float n, float f) {
return res;
}
-m4f m4f::inverse() {
+m4f m4f::inverse() const {
const float* mm = (float*)m;
-
+ m4f r;
float t0 = mm[10] * mm[15];
float t1 = mm[14] * mm[11];
float t2 = mm[6] * mm[15];
@@ -205,17 +205,12 @@ m4f m4f::inverse() {
float t21 = mm[8] * mm[1];
float t22 = mm[0] * mm[5];
float t23 = mm[4] * mm[1];
-
- m4f r(1.0f);
float* o = (float*)r.m;
-
o[0] = (t0 * mm[5] + t3 * mm[9] + t4 * mm[13]) - (t1 * mm[5] + t2 * mm[9] + t5 * mm[13]);
o[1] = (t1 * mm[1] + t6 * mm[9] + t9 * mm[13]) - (t0 * mm[1] + t7 * mm[9] + t8 * mm[13]);
o[2] = (t2 * mm[1] + t7 * mm[5] + t10 * mm[13]) - (t3 * mm[1] + t6 * mm[5] + t11 * mm[13]);
o[3] = (t5 * mm[1] + t8 * mm[5] + t11 * mm[9]) - (t4 * mm[1] + t9 * mm[5] + t10 * mm[9]);
-
float d = 1.0f / (mm[0] * o[0] + mm[4] * o[1] + mm[8] * o[2] + mm[12] * o[3]);
-
o[0] = d * o[0];
o[1] = d * o[1];
o[2] = d * o[2];
@@ -232,11 +227,10 @@ m4f m4f::inverse() {
o[13] = d * ((t20 * mm[14] + t12 * mm[2] + t19 * mm[10]) - (t18 * mm[10] + t21 * mm[14] + t13 * mm[2]));
o[14] = d * ((t18 * mm[6] + t23 * mm[14] + t15 * mm[2]) - (t22 * mm[14] + t14 * mm[2] + t19 * mm[6]));
o[15] = d * ((t22 * mm[10] + t16 * mm[2] + t21 * mm[6]) - (t20 * mm[6] + t23 * mm[10] + t17 * mm[2]));
-
return r;
}
-m4f m4f::transposed() {
+m4f m4f::transposed() const {
m4f r(1.0f);
r.m[0][0] = m[0][0];
r.m[1][0] = m[0][1];