From 16107c4ba1de6c17f4b77f3ed39c4b171024f5ee Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 8 Jan 2017 16:35:37 +0200 Subject: [PATCH] fix extract euler angles --- LICENSE | 3 +++ include/cglm-euler.h | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/LICENSE b/LICENSE index 31c12c0..f22658b 100644 --- a/LICENSE +++ b/LICENSE @@ -49,3 +49,6 @@ LICENSE: David Eberly Geometric Tools, LLC http://www.geometrictools.com/ Copyright (c) 1998-2016. All Rights Reserved. + + Computing Euler angles from a rotation matrix (euler.pdf) + Gregory G. Slabaugh diff --git a/include/cglm-euler.h b/include/cglm-euler.h index d5ad22f..b0219ba 100644 --- a/include/cglm-euler.h +++ b/include/cglm-euler.h @@ -43,8 +43,8 @@ glm_euler_order(char newOrder[3]) { CGLM_INLINE void glm_euler_angles(mat4 m, vec3 dest) { - if (m[2][0] < 1.0f) { - if (m[2][0] > -1.0f) { + if (m[0][2] < 1.0f) { + if (m[0][2] > -1.0f) { vec3 a[2]; float cy1, cy2; int path; @@ -66,13 +66,13 @@ glm_euler_angles(mat4 m, vec3 dest) { glm_vec_dup(a[path], dest); } else { - dest[0] = -atan2(m[0][1], m[2][1]); - dest[1] = -M_PI_2; - dest[3] = 0.0f; + dest[0] = atan2(m[1][0], m[2][0]); + dest[1] = M_PI_2; + dest[2] = 0.0f; } } else { - dest[0] = atan2f(m[0][1], m[1][1]); - dest[1] = M_PI_2; + dest[0] = atan2f(-m[1][0], -m[2][0]); + dest[1] =-M_PI_2; dest[2] = 0.0f; } }