From beeac18eb120ef959b785d9c5832c4fd5c9fde44 Mon Sep 17 00:00:00 2001 From: Hristo Stamenov Date: Sat, 29 May 2021 14:53:00 +0300 Subject: [PATCH] Fix QuaternionToMatrix returning transposed result. (#1793) --- src/raymath.h | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/raymath.h b/src/raymath.h index e396d5a3a..7ab798602 100644 --- a/src/raymath.h +++ b/src/raymath.h @@ -1389,23 +1389,28 @@ RMDEF Quaternion QuaternionFromMatrix(Matrix mat) RMDEF Matrix QuaternionToMatrix(Quaternion q) { Matrix result = MatrixIdentity(); + + float a2 = q.x * q.x; + float b2 = q.y * q.y; + float c2 = q.z * q.z; + float ac = q.x * q.z; + float ab = q.x * q.y; + float bc = q.y * q.z; + float ad = q.w * q.x; + float bd = q.w * q.y; + float cd = q.w * q.z; - float a2 = 2*(q.x*q.x), b2=2*(q.y*q.y), c2=2*(q.z*q.z); //, d2=2*(q.w*q.w); + result.m0 = 1 - 2 * (b2 + c2); + result.m1 = 2 * (ab + cd); + result.m2 = 2 * (ac - bd); - float ab = 2*(q.x*q.y), ac=2*(q.x*q.z), bc=2*(q.y*q.z); - float ad = 2*(q.x*q.w), bd=2*(q.y*q.w), cd=2*(q.z*q.w); + result.m4 = 2 * (ab - cd); + result.m5 = 1 - 2 * (a2 + c2); + result.m6 = 2 * (bc + ad); - result.m0 = 1 - b2 - c2; - result.m1 = ab - cd; - result.m2 = ac + bd; - - result.m4 = ab + cd; - result.m5 = 1 - a2 - c2; - result.m6 = bc - ad; - - result.m8 = ac - bd; - result.m9 = bc + ad; - result.m10 = 1 - a2 - b2; + result.m8 = 2 * (ac + bd); + result.m9 = 2 * (bc - ad); + result.m10 = 1 - 2 * (a2 + b2); return result; }