diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index a2469082..a0e5470d 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -451,20 +451,20 @@ namespace detail T const & a ) { - T cosTheta = dot(x, y); - if(cosTheta <= epsilon()) - { - return detail::tquat( - mix(x.x, y.x, a), - mix(x.y, y.y, a), - mix(x.z, y.z, a), - mix(x.w, y.w, a)); - } - else - { - T angle = acos(cosTheta); - return (glm::sin((T(1) - a) * angle) * x + glm::sin(a * angle) * y) / glm::sin(angle); - } + T cosTheta = dot(x, y); + if(glm::abs(cosTheta - T(1)) <= epsilon()) + { + return detail::tquat( + mix(x.x, y.x, a), + mix(x.y, y.y, a), + mix(x.z, y.z, a), + mix(x.w, y.w, a)); + } + else + { + T angle = acos(cosTheta); + return (glm::sin((T(1) - a) * angle) * x + glm::sin(a * angle) * y) / glm::sin(angle); + } } template diff --git a/readme.txt b/readme.txt index 728a7c17..61032d51 100644 --- a/readme.txt +++ b/readme.txt @@ -44,6 +44,7 @@ GLM 0.9.4.1: 2012-12-17 - Fixed interaction between quaternion and euler angles. - Fixed GTC_constants build - Fixed GTX_multiple +- Fixed quat slerp using mix function when cosTheta close to 1 ================================================================================ GLM 0.9.4.0: 2012-11-18