aboutsummaryrefslogtreecommitdiff
path: root/src/math/tform.hpp
diff options
context:
space:
mode:
authorvimene <vincent.menegaux@gmail.com>2025-12-26 00:50:56 +0100
committervimene <vincent.menegaux@gmail.com>2025-12-26 00:50:56 +0100
commitb21d32a0dd906404b0cdf7d6edf395ba63adba8b (patch)
tree8937a36f4038b5f4dd8ac1aa55f83cb4161be9ac /src/math/tform.hpp
parent00370c21f107ff2a320fbdef170e24a8b5cda92a (diff)
downloadengine-b21d32a0dd906404b0cdf7d6edf395ba63adba8b.tar.gz
transpose matrix representation
map values[i * 4 + j] to values[i + j * 4], meaning that values[1] is now the second line, first column, instead of first line, second column
Diffstat (limited to 'src/math/tform.hpp')
-rw-r--r--src/math/tform.hpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/math/tform.hpp b/src/math/tform.hpp
index cd9301f..d47e0ad 100644
--- a/src/math/tform.hpp
+++ b/src/math/tform.hpp
@@ -22,24 +22,24 @@ class Transform {
constexpr Matrix4 to_mat4() const & {
return {
- scale.x * (2.f * (rot.w * rot.w + rot.x * rot.x) - 1.f), scale.y * (2.f * (rot.x * rot.y - rot.w * rot.z) ), scale.z * (2.f * (rot.x * rot.z + rot.w * rot.y) ), loc.x,
- scale.x * (2.f * (rot.x * rot.y + rot.w * rot.z) ), scale.y * (2.f * (rot.w * rot.w + rot.y * rot.y) - 1.f), scale.z * (2.f * (rot.y * rot.z - rot.w * rot.x) ), loc.y,
- scale.x * (2.f * (rot.x * rot.z - rot.w * rot.y) ), scale.y * (2.f * (rot.y * rot.z + rot.w * rot.x) ), scale.z * (2.f * (rot.w * rot.w + rot.z * rot.z) - 1.f), loc.z,
- 0.f, 0.f, 0.f, 1.f,
+ scale.x * (2.f * (rot.w * rot.w + rot.x * rot.x) - 1.f), scale.x * (2.f * (rot.x * rot.y + rot.w * rot.z) ), scale.x * (2.f * (rot.x * rot.z - rot.w * rot.y) ), 0.f,
+ scale.y * (2.f * (rot.x * rot.y - rot.w * rot.z) ), scale.y * (2.f * (rot.w * rot.w + rot.y * rot.y) - 1.f), scale.y * (2.f * (rot.y * rot.z + rot.w * rot.x) ), 0.f,
+ scale.z * (2.f * (rot.x * rot.z + rot.w * rot.y) ), scale.z * (2.f * (rot.y * rot.z - rot.w * rot.x) ), scale.z * (2.f * (rot.w * rot.w + rot.z * rot.z) - 1.f), 0.f,
+ loc.x, loc.y, loc.z, 1.f,
};
}
constexpr Matrix4 to_inverse_mat4() const & {
std::array<float, 3 * 3> m{{
- (2.f * (rot.w * rot.w + rot.x * rot.x) - 1.f) / scale.x, (2.f * (rot.x * rot.y + rot.w * rot.z) ) / scale.x, (2.f * (rot.x * rot.z - rot.w * rot.y) ) / scale.x,
- (2.f * (rot.x * rot.y - rot.w * rot.z) ) / scale.y, (2.f * (rot.w * rot.w + rot.y * rot.y) - 1.f) / scale.y, (2.f * (rot.y * rot.z + rot.w * rot.x) ) / scale.y,
- (2.f * (rot.x * rot.z + rot.w * rot.y) ) / scale.z, (2.f * (rot.y * rot.z - rot.w * rot.x) ) / scale.z, (2.f * (rot.w * rot.w + rot.z * rot.z) - 1.f) / scale.z,
+ (2.f * (rot.w * rot.w + rot.x * rot.x) - 1.f) / scale.x, (2.f * (rot.x * rot.y - rot.w * rot.z) ) / scale.y, (2.f * (rot.x * rot.z + rot.w * rot.y) ) / scale.z,
+ (2.f * (rot.x * rot.y + rot.w * rot.z) ) / scale.x, (2.f * (rot.w * rot.w + rot.y * rot.y) - 1.f) / scale.y, (2.f * (rot.y * rot.z - rot.w * rot.x) ) / scale.z,
+ (2.f * (rot.x * rot.z - rot.w * rot.y) ) / scale.x, (2.f * (rot.y * rot.z + rot.w * rot.x) ) / scale.y, (2.f * (rot.w * rot.w + rot.z * rot.z) - 1.f) / scale.z,
}};
return {
- m[0], m[1], m[2], - (m[0] * loc.x + m[1] * loc.y + m[2] * loc.z),
- m[3], m[4], m[5], - (m[3] * loc.x + m[4] * loc.y + m[5] * loc.z),
- m[6], m[7], m[8], - (m[6] * loc.x + m[7] * loc.y + m[8] * loc.z),
- 0.f, 0.f, 0.f, 1.0f,
+ m[0], m[1], m[2], 0.f,
+ m[3], m[4], m[5], 0.f,
+ m[6], m[7], m[8], 0.f,
+ -loc.dot({ m[0], m[3], m[6] }), -loc.dot({ m[1], m[4], m[7] }), -loc.dot({ m[2], m[5], m[8] }), 1.f,
};
}
};