|
|
@@ -451,20 +451,20 @@ namespace detail
|
|
|
T const & a
|
|
|
)
|
|
|
{
|
|
|
- T cosTheta = dot(x, y);
|
|
|
- if(cosTheta <= epsilon<T>())
|
|
|
- {
|
|
|
- return detail::tquat<T>(
|
|
|
- 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<T>())
|
|
|
+ {
|
|
|
+ return detail::tquat<T>(
|
|
|
+ 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 <typename T>
|