7 template<
typename T, qualifier Q>
10 T
epsilon =
static_cast<T
>(0.01);
11 T epsilon2 =
static_cast<T
>(0.1);
15 if ((
abs(m[1][0] + m[0][1]) < epsilon2) && (
abs(m[2][0] + m[0][2]) < epsilon2) && (
abs(m[2][1] + m[1][2]) < epsilon2) && (
abs(m[0][0] + m[1][1] + m[2][2] -
static_cast<T
>(3.0)) < epsilon2))
17 angle =
static_cast<T
>(0.0);
18 axis.x =
static_cast<T
>(1.0);
19 axis.y =
static_cast<T
>(0.0);
20 axis.z =
static_cast<T
>(0.0);
23 angle =
static_cast<T
>(3.1415926535897932384626433832795);
24 T xx = (m[0][0] +
static_cast<T
>(1.0)) *
static_cast<T
>(0.5);
25 T yy = (m[1][1] +
static_cast<T
>(1.0)) *
static_cast<T
>(0.5);
26 T zz = (m[2][2] +
static_cast<T
>(1.0)) *
static_cast<T
>(0.5);
27 T xy = (m[1][0] + m[0][1]) *
static_cast<T
>(0.25);
28 T xz = (m[2][0] + m[0][2]) *
static_cast<T
>(0.25);
29 T yz = (m[2][1] + m[1][2]) *
static_cast<T
>(0.25);
30 if((xx > yy) && (xx > zz))
34 axis.x =
static_cast<T
>(0.0);
35 axis.y =
static_cast<T
>(0.7071);
36 axis.z =
static_cast<T
>(0.7071);
49 axis.x =
static_cast<T
>(0.7071);
50 axis.y =
static_cast<T
>(0.0);
51 axis.z =
static_cast<T
>(0.7071);
64 axis.x =
static_cast<T
>(0.7071);
65 axis.y =
static_cast<T
>(0.7071);
66 axis.z =
static_cast<T
>(0.0);
77 T s =
sqrt((m[2][1] - m[1][2]) * (m[2][1] - m[1][2]) + (m[2][0] - m[0][2]) * (m[2][0] - m[0][2]) + (m[1][0] - m[0][1]) * (m[1][0] - m[0][1]));
79 s =
static_cast<T
>(1);
80 T
const angleCos = (m[0][0] + m[1][1] + m[2][2] -
static_cast<T
>(1)) *
static_cast<T
>(0.5);
81 if(angleCos -
static_cast<T
>(1) <
epsilon)
85 axis.x = (m[1][2] - m[2][1]) / s;
86 axis.y = (m[2][0] - m[0][2]) / s;
87 axis.z = (m[0][1] - m[1][0]) / s;
90 template<
typename T, qualifier Q>
95 T t =
static_cast<T
>(1) - c;
99 t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s,
static_cast<T
>(0.0),
100 t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s,
static_cast<T
>(0.0),
101 t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c,
static_cast<T
>(0.0),
102 static_cast<T
>(0.0),
static_cast<T
>(0.0),
static_cast<T
>(0.0),
static_cast<T
>(1.0));
105 template<
typename T, qualifier Q>
109 m[0][0], m[0][1], m[0][2],
static_cast<T
>(0.0),
110 m[1][0], m[1][1], m[1][2],
static_cast<T
>(0.0),
111 m[2][0], m[2][1], m[2][2],
static_cast<T
>(0.0),
112 static_cast<T
>(0.0),
static_cast<T
>(0.0),
static_cast<T
>(0.0),
static_cast<T
>(1.0));
115 template<
typename T, qualifier Q>
116 GLM_FUNC_QUALIFIER
mat<4, 4, T, Q> interpolate(
mat<4, 4, T, Q> const& m1,
mat<4, 4, T, Q> const& m2, T
const delta)
122 axisAngle(dltRotation, dltAxis, dltAngle);
124 out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]);
125 out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]);
126 out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]);
GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x)
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< L, T, Q > sin(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:41
GLM_FUNC_QUALIFIER vec< L, T, Q > cos(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:50
GLM_FUNC_QUALIFIER vec< L, T, Q > acos(vec< L, T, Q > const &v)
Definition func_trigonometric.inl:77
GLM_FUNC_DECL T angle(qua< T, Q > const &x)
Definition quaternion_trigonometric.inl:6
GLM_FUNC_DECL vec< 3, T, Q > axis(qua< T, Q > const &x)
Definition quaternion_trigonometric.inl:17
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 mat< 4, 4, T, Q > axisAngleMatrix(vec< 3, T, Q > const &Axis, T const Angle)
Definition matrix_interpolation.inl:91
GLM_FUNC_DECL mat< 4, 4, T, Q > extractMatrixRotation(mat< 4, 4, T, Q > const &Mat)
Definition matrix_interpolation.inl:106
GLM_FUNC_DECL mat< 4, 4, T, Q > interpolate(mat< 4, 4, T, Q > const &m1, mat< 4, 4, T, Q > const &m2, T const Delta)
Definition matrix_interpolation.inl:116
GLM_FUNC_DECL void axisAngle(mat< 4, 4, T, Q > const &Mat, vec< 3, T, Q > &Axis, T &Angle)
Definition matrix_interpolation.inl:8
Core features
Definition common.hpp:21
Definition qualifier.hpp:36
Definition qualifier.hpp:35