fixed bug in quaternion slerp

This commit is contained in:
Joel Nises 2014-06-05 17:48:53 +02:00
parent 4da58d88d4
commit e610e9446e
2 changed files with 13 additions and 4 deletions

View File

@ -582,10 +582,10 @@ namespace detail
{ {
// Linear interpolation // Linear interpolation
return detail::tquat<T, P>( return detail::tquat<T, P>(
mix(x.w, y.w, a), mix(x.w, z.w, a),
mix(x.x, y.x, a), mix(x.x, z.x, a),
mix(x.y, y.y, a), mix(x.y, z.y, a),
mix(x.z, y.z, a)); mix(x.z, z.z, a));
} }
else else
{ {

View File

@ -196,6 +196,15 @@ int test_quat_slerp()
// Must be 0 0.00X 0 0.99999 // Must be 0 0.00X 0 0.99999
glm::quat almostid = glm::slerp(id, glm::angleAxis(0.1f, glm::vec3(0.0f, 1.0f, 0.0f)), 0.5f); glm::quat almostid = glm::slerp(id, glm::angleAxis(0.1f, glm::vec3(0.0f, 1.0f, 0.0f)), 0.5f);
// Testing quaternions with opposite sign
{
glm::quat a(-1, 0, 0, 0);
glm::quat result = glm::slerp(a, id, 0.5f);
Error += glm::epsilonEqual(glm::pow(glm::dot(id, result), 2.f), 1.f, 0.01f) ? 0 : 1;
}
return Error; return Error;
} }