@@ -99,12 +99,13 @@ Vector3 Vector3::Transform(const Vector3& v, const Quaternion& q)
9999void Matrix4::Invert ()
100100{
101101 // Thanks slow math
102- float tmp[ 12 ]; /* temp array for pairs */
103- float src[ 16 ]; /* array of transpose source matrix */
104- float dst [16 ]; /* storage */
105- float det; /* determinant */
106- /* transpose matrix */
102+ // This is a really janky way to unroll everything...
103+ float tmp[ 12 ];
104+ float src [16 ];
105+ float dst[ 16 ];
106+ float det;
107107
108+ // Transpose matrix
108109 // row 1 to col 1
109110 src[0 ] = mat[0 ][0 ];
110111 src[4 ] = mat[0 ][1 ];
@@ -129,13 +130,7 @@ void Matrix4::Invert()
129130 src[11 ] = mat[3 ][2 ];
130131 src[15 ] = mat[3 ][3 ];
131132
132- // for (int i = 0; i < 4; i++) {
133- // src[i] = mat[i*4];
134- // src[i + 4] = mat[i*4 + 1];
135- // src[i + 8] = mat[i*4 + 2];
136- // src[i + 12] = mat[i*4 + 3];
137- // }
138- /* calculate pairs for first 8 elements (cofactors) */
133+ // Calculate cofactors
139134 tmp[0 ] = src[10 ] * src[15 ];
140135 tmp[1 ] = src[11 ] * src[14 ];
141136 tmp[2 ] = src[9 ] * src[15 ];
@@ -148,7 +143,7 @@ void Matrix4::Invert()
148143 tmp[9 ] = src[10 ] * src[12 ];
149144 tmp[10 ] = src[8 ] * src[13 ];
150145 tmp[11 ] = src[9 ] * src[12 ];
151- /* calculate first 8 elements (cofactors) */
146+
152147 dst[0 ] = tmp[0 ] * src[5 ] + tmp[3 ] * src[6 ] + tmp[4 ] * src[7 ];
153148 dst[0 ] -= tmp[1 ] * src[5 ] + tmp[2 ] * src[6 ] + tmp[5 ] * src[7 ];
154149 dst[1 ] = tmp[1 ] * src[4 ] + tmp[6 ] * src[6 ] + tmp[9 ] * src[7 ];
@@ -165,7 +160,7 @@ void Matrix4::Invert()
165160 dst[6 ] -= tmp[2 ] * src[0 ] + tmp[7 ] * src[1 ] + tmp[10 ] * src[3 ];
166161 dst[7 ] = tmp[4 ] * src[0 ] + tmp[9 ] * src[1 ] + tmp[10 ] * src[2 ];
167162 dst[7 ] -= tmp[5 ] * src[0 ] + tmp[8 ] * src[1 ] + tmp[11 ] * src[2 ];
168- /* calculate pairs for second 8 elements (cofactors) */
163+
169164 tmp[0 ] = src[2 ] * src[7 ];
170165 tmp[1 ] = src[3 ] * src[6 ];
171166 tmp[2 ] = src[1 ] * src[7 ];
@@ -178,7 +173,7 @@ void Matrix4::Invert()
178173 tmp[9 ] = src[2 ] * src[4 ];
179174 tmp[10 ] = src[0 ] * src[5 ];
180175 tmp[11 ] = src[1 ] * src[4 ];
181- /* calculate second 8 elements (cofactors) */
176+
182177 dst[8 ] = tmp[0 ] * src[13 ] + tmp[3 ] * src[14 ] + tmp[4 ] * src[15 ];
183178 dst[8 ] -= tmp[1 ] * src[13 ] + tmp[2 ] * src[14 ] + tmp[5 ] * src[15 ];
184179 dst[9 ] = tmp[1 ] * src[12 ] + tmp[6 ] * src[14 ] + tmp[9 ] * src[15 ];
@@ -195,12 +190,16 @@ void Matrix4::Invert()
195190 dst[14 ] -= tmp[10 ] * src[11 ] + tmp[2 ] * src[8 ] + tmp[7 ] * src[9 ];
196191 dst[15 ] = tmp[10 ] * src[10 ] + tmp[4 ] * src[8 ] + tmp[9 ] * src[9 ];
197192 dst[15 ] -= tmp[8 ] * src[9 ] + tmp[11 ] * src[10 ] + tmp[5 ] * src[8 ];
198- /* calculate determinant */
193+
194+ // Calculate determinant
199195 det = src[0 ] * dst[0 ] + src[1 ] * dst[1 ] + src[2 ] * dst[2 ] + src[3 ] * dst[3 ];
200- /* calculate matrix inverse */
196+
197+ // Inverse of matrix is divided by determinant
201198 det = 1 / det;
202199 for (int j = 0 ; j < 16 ; j++)
200+ {
203201 dst[j] *= det;
202+ }
204203
205204 // Set it back
206205 for (int i = 0 ; i < 4 ; i++)
0 commit comments