From b56cf58e337550094b6f811caa1bbec106acb7e5 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 2 Dec 2015 16:55:04 -0800 Subject: [PATCH] Fix for mirrored transforms in FBX models extractScale will now return negative scale for left-handed matrices. --- libraries/shared/src/GLMHelpers.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/shared/src/GLMHelpers.cpp b/libraries/shared/src/GLMHelpers.cpp index e6fbe5e5cc..257ef2f00e 100644 --- a/libraries/shared/src/GLMHelpers.cpp +++ b/libraries/shared/src/GLMHelpers.cpp @@ -285,7 +285,14 @@ glm::quat glmExtractRotation(const glm::mat4& matrix) { } glm::vec3 extractScale(const glm::mat4& matrix) { - return glm::vec3(glm::length(matrix[0]), glm::length(matrix[1]), glm::length(matrix[2])); + glm::mat3 m(matrix); + float det = glm::determinant(m); + if (det < 0) { + // left handed matrix, flip sign to compensate. + return glm::vec3(-glm::length(m[0]), glm::length(m[1]), glm::length(m[2])); + } else { + return glm::vec3(glm::length(m[0]), glm::length(m[1]), glm::length(m[2])); + } } float extractUniformScale(const glm::mat4& matrix) {