From b27603c26839ba0e40ce657c38e6007a7087653f Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 8 Apr 2018 00:09:40 +0300 Subject: [PATCH] normalize quaternion before converting to matrix * because it must be unit quaternion and didn't specified this in docs. * we must provide alternative func for unit quat --- include/cglm/quat.h | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/include/cglm/quat.h b/include/cglm/quat.h index a9a3649..e9e986e 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -182,15 +182,17 @@ glm_quat_mulv(versor q1, versor q2, versor dest) { CGLM_INLINE void glm_quat_mat4(versor q, mat4 dest) { - float w, x, y, z; - float xx, yy, zz; - float xy, yz, xz; - float wx, wy, wz; + float w, x, y, z, + xx, yy, zz, + xy, yz, xz, + wx, wy, wz, norm; - w = q[0]; - x = q[1]; - y = q[2]; - z = q[3]; + norm = 1.0f / glm_quat_norm(q); + + w = q[0] * norm; + x = q[1] * norm; + y = q[2] * norm; + z = q[3] * norm; xx = 2.0f * x * x; xy = 2.0f * x * y; wx = 2.0f * w * x; yy = 2.0f * y * y; yz = 2.0f * y * z; wy = 2.0f * w * y; @@ -226,15 +228,17 @@ glm_quat_mat4(versor q, mat4 dest) { CGLM_INLINE void glm_quat_mat3(versor q, mat3 dest) { - float w, x, y, z; - float xx, yy, zz; - float xy, yz, xz; - float wx, wy, wz; + float w, x, y, z, + xx, yy, zz, + xy, yz, xz, + wx, wy, wz, norm; - w = q[0]; - x = q[1]; - y = q[2]; - z = q[3]; + norm = 1.0f / glm_quat_norm(q); + + w = q[0] * norm; + x = q[1] * norm; + y = q[2] * norm; + z = q[3] * norm; xx = 2.0f * x * x; xy = 2.0f * x * y; wx = 2.0f * w * x; yy = 2.0f * y * y; yz = 2.0f * y * z; wy = 2.0f * w * y;