9 template<
typename T, qualifier Q>
15 template<
typename T, qualifier Q>
18 return static_cast<T
>(atan(
static_cast<T
>(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z));
21 template<
typename T, qualifier Q>
25 T
const y =
static_cast<T
>(2) * (q.y * q.z + q.w * q.x);
26 T
const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z;
29 return static_cast<T
>(
static_cast<T
>(2) * atan(q.x, q.w));
31 return static_cast<T
>(atan(y, x));
34 template<
typename T, qualifier Q>
37 return asin(clamp(
static_cast<T
>(-2) * (q.x * q.z - q.w * q.y),
static_cast<T
>(-1),
static_cast<T
>(1)));
40 template<
typename T, qualifier Q>
54 Result[0][0] = T(1) - T(2) * (qyy + qzz);
55 Result[0][1] = T(2) * (qxy + qwz);
56 Result[0][2] = T(2) * (qxz - qwy);
58 Result[1][0] = T(2) * (qxy - qwz);
59 Result[1][1] = T(1) - T(2) * (qxx + qzz);
60 Result[1][2] = T(2) * (qyz + qwx);
62 Result[2][0] = T(2) * (qxz + qwy);
63 Result[2][1] = T(2) * (qyz - qwx);
64 Result[2][2] = T(1) - T(2) * (qxx + qyy);
68 template<
typename T, qualifier Q>
74 template<
typename T, qualifier Q>
77 T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];
78 T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];
79 T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];
80 T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];
83 T fourBiggestSquaredMinus1 = fourWSquaredMinus1;
84 if(fourXSquaredMinus1 > fourBiggestSquaredMinus1)
86 fourBiggestSquaredMinus1 = fourXSquaredMinus1;
89 if(fourYSquaredMinus1 > fourBiggestSquaredMinus1)
91 fourBiggestSquaredMinus1 = fourYSquaredMinus1;
94 if(fourZSquaredMinus1 > fourBiggestSquaredMinus1)
96 fourBiggestSquaredMinus1 = fourZSquaredMinus1;
100 T biggestVal =
sqrt(fourBiggestSquaredMinus1 +
static_cast<T
>(1)) *
static_cast<T
>(0.5);
101 T mult =
static_cast<T
>(0.25) / biggestVal;
106 return qua<T, Q>(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult);
108 return qua<T, Q>((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult);
110 return qua<T, Q>((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult);
112 return qua<T, Q>((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal);
119 template<
typename T, qualifier Q>
125 template<
typename T, qualifier Q>
129 for(length_t i = 0; i < x.length(); ++i)
130 Result[i] = x[i] < y[i];
134 template<
typename T, qualifier Q>
138 for(length_t i = 0; i < x.length(); ++i)
139 Result[i] = x[i] <= y[i];
143 template<
typename T, qualifier Q>
147 for(length_t i = 0; i < x.length(); ++i)
148 Result[i] = x[i] > y[i];
152 template<
typename T, qualifier Q>
156 for(length_t i = 0; i < x.length(); ++i)
157 Result[i] = x[i] >= y[i];
162 template<
typename T, qualifier Q>
165# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT
172 template<
typename T, qualifier Q>
177 Result[2] = -direction;
179 Result[1] =
cross(Result[2], Result[0]);
184 template<
typename T, qualifier Q>
189 Result[2] = direction;
191 Result[1] =
cross(Result[2], Result[0]);
197#if GLM_CONFIG_SIMD == GLM_ENABLE
198# include "quaternion_simd.inl"
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 > 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 vec< L, T, Q > asin(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:68
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec< L, bool, Q > const &v)
Definition func_vector_relational.inl:67
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec< L, bool, Q > greaterThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Definition func_vector_relational.inl:31
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec< L, bool, Q > greaterThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Definition func_vector_relational.inl:22
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec< L, bool, Q > lessThanEqual(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Definition func_vector_relational.inl:13
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec< L, bool, Q > lessThan(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Definition func_vector_relational.inl:4
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec< L, bool, Q > equal(vec< L, T, Q > const &x, vec< L, T, Q > const &y)
Definition func_vector_relational.inl:40
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
Definition scalar_constants.inl:6
GLM_FUNC_DECL T roll(qua< T, Q > const &x)
Definition quaternion.inl:16
GLM_FUNC_DECL qua< T, Q > quat_cast(mat< 3, 3, T, Q > const &x)
Definition quaternion.inl:75
GLM_FUNC_DECL mat< 3, 3, T, Q > mat3_cast(qua< T, Q > const &x)
Definition quaternion.inl:41
GLM_FUNC_DECL qua< T, Q > quatLookAtRH(vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
Definition quaternion.inl:173
GLM_FUNC_DECL qua< T, Q > quatLookAt(vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
Definition quaternion.inl:163
GLM_FUNC_DECL T pitch(qua< T, Q > const &x)
Definition quaternion.inl:22
GLM_FUNC_DECL T yaw(qua< T, Q > const &x)
Definition quaternion.inl:35
GLM_FUNC_DECL mat< 4, 4, T, Q > mat4_cast(qua< T, Q > const &x)
Definition quaternion.inl:69
GLM_FUNC_DECL vec< 3, T, Q > eulerAngles(qua< T, Q > const &x)
Definition quaternion.inl:10
GLM_FUNC_DECL qua< T, Q > quatLookAtLH(vec< 3, T, Q > const &direction, vec< 3, T, Q > const &up)
Definition quaternion.inl:185
Core features
Definition common.hpp:21
Definition qualifier.hpp:36
Definition type_quat.hpp:20
Definition qualifier.hpp:35