From 9a321befd4fe8dbf6335b09c3277f4ae4d1d5ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Mohn=20M=C3=B8rch?= Date: Thu, 30 Oct 2025 20:35:35 +0100 Subject: [PATCH] Fixed issue where the linalg.quaternion_from_forward_and_up could return incorrect values in certain scenarioes --- core/math/linalg/specific.odin | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/math/linalg/specific.odin b/core/math/linalg/specific.odin index 3c37d4d255a..cfb1c2b0d92 100644 --- a/core/math/linalg/specific.odin +++ b/core/math/linalg/specific.odin @@ -635,7 +635,7 @@ quaternion_from_forward_and_up_f16 :: proc "contextless" (forward, up: Vector3f1 case: S := 2 * math.sqrt(1 + m[2, 2] - m[0, 0] - m[1, 1]) q.w = (m[0, 1] - m[1, 0]) / S - q.x = (m[2, 0] - m[0, 2]) / S + q.x = (m[2, 0] + m[0, 2]) / S q.y = (m[2, 1] + m[1, 2]) / S q.z = 0.25 * S } @@ -679,7 +679,7 @@ quaternion_from_forward_and_up_f32 :: proc "contextless" (forward, up: Vector3f3 case: S := 2 * math.sqrt(1 + m[2, 2] - m[0, 0] - m[1, 1]) q.w = (m[0, 1] - m[1, 0]) / S - q.x = (m[2, 0] - m[0, 2]) / S + q.x = (m[2, 0] + m[0, 2]) / S q.y = (m[2, 1] + m[1, 2]) / S q.z = 0.25 * S } @@ -723,7 +723,7 @@ quaternion_from_forward_and_up_f64 :: proc "contextless" (forward, up: Vector3f6 case: S := 2 * math.sqrt(1 + m[2, 2] - m[0, 0] - m[1, 1]) q.w = (m[0, 1] - m[1, 0]) / S - q.x = (m[2, 0] - m[0, 2]) / S + q.x = (m[2, 0] + m[0, 2]) / S q.y = (m[2, 1] + m[1, 2]) / S q.z = 0.25 * S }