227 T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
228 T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
229 T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
230 T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
231 T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
232 T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
235 + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
236 - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
237 + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
238 - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
241 m[0][0] * DetCof[0] + m[0][1] * DetCof[1] +
242 m[0][2] * DetCof[2] + m[0][3] * DetCof[3];
273 T OneOverDeterminant =
static_cast<T
>(1) / (
274 + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
275 - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
276 + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]));
279 Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant;
280 Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant;
281 Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant;
282 Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant;
283 Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant;
284 Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant;
285 Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant;
286 Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant;
287 Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant;
298 T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
299 T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
300 T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
302 T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
303 T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
304 T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
306 T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
307 T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
308 T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
310 T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
311 T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
312 T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
314 T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
315 T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
316 T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
318 T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
319 T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
320 T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
334 vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);
335 vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);
336 vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);
337 vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);
341 mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB);
343 vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);
346 T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w);
348 T OneOverDeterminant =
static_cast<T
>(1) / Dot1;
350 return Inverse * OneOverDeterminant;
363 GLM_FUNC_QUALIFIER
typename detail::outerProduct_trait<DA, DB, T, Q>::type outerProduct(vec<DA, T, Q>
const& c, vec<DB, T, Q>
const& r)
GLM_FUNC_QUALIFIER mat< C, R, T, Q > matrixCompMult(mat< C, R, T, Q > const &x, mat< C, R, T, Q > const &y)
Definition func_matrix.inl:356
GLM_FUNC_QUALIFIER mat< C, R, T, Q > inverse(mat< C, R, T, Q > const &m)
Definition func_matrix.inl:388