8 template<
typename T, qualifier Q>
11 return qua<T, Q>(
static_cast<T
>(1),
static_cast<T
>(0),
static_cast<T
>(0),
static_cast<T
>(0));
14 template<
typename T, qualifier Q>
20 template<
typename T, qualifier Q>
26 template<
typename T, qualifier Q>
35 return mix(
mix(q1, q2, h),
mix(s1, s2, h),
static_cast<T
>(2) * (
static_cast<T
>(1) - h) * h);
38 template<
typename T, qualifier Q>
47 return exp((
log(next * invQuat) +
log(prev * invQuat)) /
static_cast<T
>(-4)) * curr;
50 template<
typename T, qualifier Q>
56 template<
typename T, qualifier Q>
62 template<
typename T, qualifier Q>
65 T w =
static_cast<T
>(1) - q.x * q.x - q.y * q.y - q.z * q.z;
72 template<
typename T, qualifier Q>
75 return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;
78 template<
typename T, qualifier Q>
81 if(a <=
static_cast<T
>(0))
return x;
82 if(a >=
static_cast<T
>(1))
return y;
86 if(fCos <
static_cast<T
>(0))
96 k0 =
static_cast<T
>(1) - a;
97 k1 =
static_cast<T
>(0) + a;
101 T fSin =
sqrt(T(1) - fCos * fCos);
102 T fAngle = atan(fSin, fCos);
103 T fOneOverSin =
static_cast<T
>(1) / fSin;
104 k0 =
sin((
static_cast<T
>(1) - a) * fAngle) * fOneOverSin;
105 k1 =
sin((
static_cast<T
>(0) + a) * fAngle) * fOneOverSin;
109 k0 * x.w + k1 * y2.w,
110 k0 * x.x + k1 * y2.x,
111 k0 * x.y + k1 * y2.y,
112 k0 * x.z + k1 * y2.z);
115 template<
typename T, qualifier Q>
121 template<
typename T, qualifier Q>
124 T cosTheta = dot(orig, dest);
127 if(cosTheta >=
static_cast<T
>(1) -
epsilon<T>()) {
132 if(cosTheta <
static_cast<T
>(-1) +
epsilon<T>())
148 rotationAxis =
cross(orig, dest);
150 T s =
sqrt((T(1) + cosTheta) *
static_cast<T
>(2));
151 T invs =
static_cast<T
>(1) / s;
154 s *
static_cast<T
>(0.5f),
155 rotationAxis.x * invs,
156 rotationAxis.y * invs,
157 rotationAxis.z * invs);
GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
Definition func_common.inl:526
GLM_FUNC_QUALIFIER vec< L, T, Q > sqrt(vec< L, T, Q > const &x)
Definition func_exponential.inl:128
GLM_FUNC_QUALIFIER vec< L, T, Q > log(vec< L, T, Q > const &x)
Definition func_exponential.inl:88
GLM_FUNC_QUALIFIER vec< L, T, Q > exp(vec< L, T, Q > const &x)
Definition func_exponential.inl:80
GLM_FUNC_QUALIFIER vec< L, T, Q > normalize(vec< L, T, Q > const &x)
Definition func_geometric.inl:190
GLM_FUNC_QUALIFIER vec< 3, T, Q > cross(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
Definition func_geometric.inl:175
GLM_FUNC_QUALIFIER mat< C, R, T, Q > inverse(mat< C, R, T, Q > const &m)
Definition func_matrix.inl:388
GLM_FUNC_QUALIFIER vec< L, T, Q > sin(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:41
GLM_FUNC_DECL qua< T, Q > angleAxis(T const &angle, vec< 3, T, Q > const &axis)
Definition quaternion_trigonometric.inl:27
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
Definition scalar_constants.inl:6
GLM_FUNC_DECL GLM_CONSTEXPR genType pi()
Return the pi constant for floating point types.
Definition scalar_constants.inl:13
GLM_FUNC_DECL T length2(vec< L, T, Q > const &x)
Definition norm.inl:26
GLM_FUNC_DECL T extractRealComponent(qua< T, Q > const &q)
Definition quaternion.inl:63
GLM_FUNC_DECL qua< T, Q > fastMix(qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
Definition quaternion.inl:116
GLM_FUNC_DECL qua< T, Q > intermediate(qua< T, Q > const &prev, qua< T, Q > const &curr, qua< T, Q > const &next)
Definition quaternion.inl:40
GLM_FUNC_DECL qua< T, Q > squad(qua< T, Q > const &q1, qua< T, Q > const &q2, qua< T, Q > const &s1, qua< T, Q > const &s2, T const &h)
Definition quaternion.inl:28
GLM_FUNC_DECL GLM_CONSTEXPR qua< T, Q > quat_identity()
Definition quaternion.inl:9
GLM_FUNC_DECL qua< T, Q > shortMix(qua< T, Q > const &x, qua< T, Q > const &y, T const &a)
Definition quaternion.inl:79
GLM_FUNC_DECL qua< T, Q > rotation(vec< 3, T, Q > const &orig, vec< 3, T, Q > const &dest)
Definition quaternion.inl:122
Core features
Definition common.hpp:21
Definition type_quat.hpp:20
Definition qualifier.hpp:35