Original Post
Anybody want to point me to some code that will compute the inverse of a opengl matrix. I'm kind of too lazy and pressed for time. Thanks.
template <class T> bool Matrix4<T>::InvertSelf(T epsilon){ T mi_23_23 = m[10] * m[15] - m[14] * m[11]; T mi_23_13 = m[6] * m[15] - m[14] * m[7]; T mi_23_12 = m[6] * m[11] - m[10] * m[7]; T mi_23_03 = m[2] * m[15] - m[14] * m[3]; T mi_23_02 = m[2] * m[11] - m[10] * m[3]; T mi_23_01 = m[2] * m[7] - m[6] * m[3]; T mi_123_123 = m[5] * mi_23_23 - m[9] * mi_23_13 + m[13] * mi_23_12; T mi_123_023 = m[1] * mi_23_23 - m[9] * mi_23_03 + m[13] * mi_23_02; T mi_123_013 = m[1] * mi_23_13 - m[5] * mi_23_03 + m[13] * mi_23_01; T mi_123_012 = m[1] * mi_23_12 - m[5] * mi_23_02 + m[9] * mi_23_01; T det = m[0] * mi_123_123 - m[4] * mi_123_023 + m[8] * mi_123_013 - m[12] * mi_123_012; if (Math::Fabs(det) < epsilon) return false; T invdet = (T)1.0 / det; T mi_13_23 = m[9] * m[15] - m[13] * m[11]; T mi_13_13 = m[5] * m[15] - m[13] * m[7]; T mi_13_12 = m[5] * m[11] - m[9] * m[7]; T mi_13_03 = m[1] * m[15] - m[13] * m[3]; T mi_13_02 = m[1] * m[11] - m[9] * m[3]; T mi_13_01 = m[1] * m[7] - m[5] * m[3]; T mi_12_23 = m[9] * m[14] - m[13] * m[10]; T mi_12_13 = m[5] * m[14] - m[13] * m[6]; T mi_12_12 = m[5] * m[10] - m[9] * m[6]; T mi_12_03 = m[1] * m[14] - m[13] * m[2]; T mi_12_02 = m[1] * m[10] - m[9] * m[2]; T mi_12_01 = m[1] * m[6] - m[5] * m[2]; T mi_023_123 = m[4] * mi_23_23 - m[8] * mi_23_13 + m[12] * mi_23_12; T mi_023_023 = m[0] * mi_23_23 - m[8] * mi_23_03 + m[12] * mi_23_02; T mi_023_013 = m[0] * mi_23_13 - m[4] * mi_23_03 + m[12] * mi_23_01; T mi_023_012 = m[0] * mi_23_12 - m[4] * mi_23_02 + m[8] * mi_23_01; T mi_013_123 = m[4] * mi_13_23 - m[8] * mi_13_13 + m[12] * mi_13_12; T mi_013_023 = m[0] * mi_13_23 - m[8] * mi_13_03 + m[12] * mi_13_02; T mi_013_013 = m[0] * mi_13_13 - m[4] * mi_13_03 + m[12] * mi_13_01; T mi_013_012 = m[0] * mi_13_12 - m[4] * mi_13_02 + m[8] * mi_13_01; T mi_012_123 = m[4] * mi_12_23 - m[8] * mi_12_13 + m[12] * mi_12_12; T mi_012_023 = m[0] * mi_12_23 - m[8] * mi_12_03 + m[12] * mi_12_02; T mi_012_013 = m[0] * mi_12_13 - m[4] * mi_12_03 + m[12] * mi_12_01; T mi_012_012 = m[0] * mi_12_12 - m[4] * mi_12_02 + m[8] * mi_12_01; m[0] = mi_123_123 * invdet; m[1] = -mi_123_023 * invdet; m[2] = mi_123_013 * invdet; m[3] = -mi_123_012 * invdet; m[4] = -mi_023_123 * invdet; m[5] = mi_023_023 * invdet; m[6] = -mi_023_013 * invdet; m[7] = mi_023_012 * invdet; m[8] = mi_013_123 * invdet; m[9] = -mi_013_023 * invdet; m[10] = mi_013_013 * invdet; m[11] = -mi_013_012 * invdet; m[12] = -mi_012_123 * invdet; m[13] = mi_012_023 * invdet; m[14] = -mi_012_013 * invdet; m[15] = mi_012_012 * invdet; return true;}This topic has been locked by a moderator. New replies are not allowed.
With your permission, GameDev.net uses analytics cookies to understand how people use the platform. You can accept analytics or continue with necessary cookies only. Learn more