Fixed indentation, tidied up the code so the if... statement is flipped around, and added <float.h> to c3d/maths.h.

This commit is contained in:
Thompson Lee 2016-07-31 07:16:14 -04:00
parent ef913eb9a4
commit 6e2c97c43f
2 changed files with 103 additions and 107 deletions

View File

@ -2,6 +2,7 @@
#include "types.h"
#include <string.h>
#include <math.h>
#include <float.h>
// See http://tauday.com/tau-manifesto
//#define M_TAU 6.28318530717958647693

View File

@ -5,129 +5,124 @@ bool Mtx_Inverse(C3D_Mtx* out)
float inv[16], det;
int i;
inv[0] = out->m[5] * out->m[10] * out->m[15] -
out->m[5] * out->m[11] * out->m[14] -
out->m[9] * out->m[6] * out->m[15] +
out->m[9] * out->m[7] * out->m[14] +
out->m[13] * out->m[6] * out->m[11] -
out->m[13] * out->m[7] * out->m[10];
inv[0] = out->m[5] * out->m[10] * out->m[15] -
out->m[5] * out->m[11] * out->m[14] -
out->m[9] * out->m[6] * out->m[15] +
out->m[9] * out->m[7] * out->m[14] +
out->m[13] * out->m[6] * out->m[11] -
out->m[13] * out->m[7] * out->m[10];
inv[4] = -out->m[4] * out->m[10] * out->m[15] +
out->m[4] * out->m[11] * out->m[14] +
out->m[8] * out->m[6] * out->m[15] -
out->m[8] * out->m[7] * out->m[14] -
out->m[12] * out->m[6] * out->m[11] +
out->m[12] * out->m[7] * out->m[10];
inv[4] = -out->m[4] * out->m[10] * out->m[15] +
out->m[4] * out->m[11] * out->m[14] +
out->m[8] * out->m[6] * out->m[15] -
out->m[8] * out->m[7] * out->m[14] -
out->m[12] * out->m[6] * out->m[11] +
out->m[12] * out->m[7] * out->m[10];
inv[8] = out->m[4] * out->m[9] * out->m[15] -
out->m[4] * out->m[11] * out->m[13] -
out->m[8] * out->m[5] * out->m[15] +
out->m[8] * out->m[7] * out->m[13] +
out->m[12] * out->m[5] * out->m[11] -
out->m[12] * out->m[7] * out->m[9];
inv[8] = out->m[4] * out->m[9] * out->m[15] -
out->m[4] * out->m[11] * out->m[13] -
out->m[8] * out->m[5] * out->m[15] +
out->m[8] * out->m[7] * out->m[13] +
out->m[12] * out->m[5] * out->m[11] -
out->m[12] * out->m[7] * out->m[9];
inv[12] = -out->m[4] * out->m[9] * out->m[14] +
out->m[4] * out->m[10] * out->m[13] +
out->m[8] * out->m[5] * out->m[14] -
out->m[8] * out->m[6] * out->m[13] -
out->m[12] * out->m[5] * out->m[10] +
out->m[12] * out->m[6] * out->m[9];
inv[12] = -out->m[4] * out->m[9] * out->m[14] +
out->m[4] * out->m[10] * out->m[13] +
out->m[8] * out->m[5] * out->m[14] -
out->m[8] * out->m[6] * out->m[13] -
out->m[12] * out->m[5] * out->m[10] +
out->m[12] * out->m[6] * out->m[9];
det = out->m[0] * inv[0] + out->m[1] * inv[4] + out->m[2] * inv[8] + out->m[3] * inv[12];
if (det != 0.0f){
if (fabsf(det) < FLT_EPSILON)
return false;
inv[1] = -out->m[1] * out->m[10] * out->m[15] +
out->m[1] * out->m[11] * out->m[14] +
out->m[9] * out->m[2] * out->m[15] -
out->m[9] * out->m[3] * out->m[14] -
out->m[13] * out->m[2] * out->m[11] +
out->m[13] * out->m[3] * out->m[10];
inv[1] = -out->m[1] * out->m[10] * out->m[15] +
out->m[1] * out->m[11] * out->m[14] +
out->m[9] * out->m[2] * out->m[15] -
out->m[9] * out->m[3] * out->m[14] -
out->m[13] * out->m[2] * out->m[11] +
out->m[13] * out->m[3] * out->m[10];
inv[5] = out->m[0] * out->m[10] * out->m[15] -
out->m[0] * out->m[11] * out->m[14] -
out->m[8] * out->m[2] * out->m[15] +
out->m[8] * out->m[3] * out->m[14] +
out->m[12] * out->m[2] * out->m[11] -
out->m[12] * out->m[3] * out->m[10];
inv[5] = out->m[0] * out->m[10] * out->m[15] -
out->m[0] * out->m[11] * out->m[14] -
out->m[8] * out->m[2] * out->m[15] +
out->m[8] * out->m[3] * out->m[14] +
out->m[12] * out->m[2] * out->m[11] -
out->m[12] * out->m[3] * out->m[10];
inv[9] = -out->m[0] * out->m[9] * out->m[15] +
out->m[0] * out->m[11] * out->m[13] +
out->m[8] * out->m[1] * out->m[15] -
out->m[8] * out->m[3] * out->m[13] -
out->m[12] * out->m[1] * out->m[11] +
out->m[12] * out->m[3] * out->m[9];
inv[9] = -out->m[0] * out->m[9] * out->m[15] +
out->m[0] * out->m[11] * out->m[13] +
out->m[8] * out->m[1] * out->m[15] -
out->m[8] * out->m[3] * out->m[13] -
out->m[12] * out->m[1] * out->m[11] +
out->m[12] * out->m[3] * out->m[9];
inv[13] = out->m[0] * out->m[9] * out->m[14] -
out->m[0] * out->m[10] * out->m[13] -
out->m[8] * out->m[1] * out->m[14] +
out->m[8] * out->m[2] * out->m[13] +
out->m[12] * out->m[1] * out->m[10] -
out->m[12] * out->m[2] * out->m[9];
inv[13] = out->m[0] * out->m[9] * out->m[14] -
out->m[0] * out->m[10] * out->m[13] -
out->m[8] * out->m[1] * out->m[14] +
out->m[8] * out->m[2] * out->m[13] +
out->m[12] * out->m[1] * out->m[10] -
out->m[12] * out->m[2] * out->m[9];
inv[2] = out->m[1] * out->m[6] * out->m[15] -
out->m[1] * out->m[7] * out->m[14] -
out->m[5] * out->m[2] * out->m[15] +
out->m[5] * out->m[3] * out->m[14] +
out->m[13] * out->m[2] * out->m[7] -
out->m[13] * out->m[3] * out->m[6];
inv[2] = out->m[1] * out->m[6] * out->m[15] -
out->m[1] * out->m[7] * out->m[14] -
out->m[5] * out->m[2] * out->m[15] +
out->m[5] * out->m[3] * out->m[14] +
out->m[13] * out->m[2] * out->m[7] -
out->m[13] * out->m[3] * out->m[6];
inv[6] = -out->m[0] * out->m[6] * out->m[15] +
out->m[0] * out->m[7] * out->m[14] +
out->m[4] * out->m[2] * out->m[15] -
out->m[4] * out->m[3] * out->m[14] -
out->m[12] * out->m[2] * out->m[7] +
out->m[12] * out->m[3] * out->m[6];
inv[6] = -out->m[0] * out->m[6] * out->m[15] +
out->m[0] * out->m[7] * out->m[14] +
out->m[4] * out->m[2] * out->m[15] -
out->m[4] * out->m[3] * out->m[14] -
out->m[12] * out->m[2] * out->m[7] +
out->m[12] * out->m[3] * out->m[6];
inv[10] = out->m[0] * out->m[5] * out->m[15] -
out->m[0] * out->m[7] * out->m[13] -
out->m[4] * out->m[1] * out->m[15] +
out->m[4] * out->m[3] * out->m[13] +
out->m[12] * out->m[1] * out->m[7] -
out->m[12] * out->m[3] * out->m[5];
inv[10] = out->m[0] * out->m[5] * out->m[15] -
out->m[0] * out->m[7] * out->m[13] -
out->m[4] * out->m[1] * out->m[15] +
out->m[4] * out->m[3] * out->m[13] +
out->m[12] * out->m[1] * out->m[7] -
out->m[12] * out->m[3] * out->m[5];
inv[14] = -out->m[0] * out->m[5] * out->m[14] +
out->m[0] * out->m[6] * out->m[13] +
out->m[4] * out->m[1] * out->m[14] -
out->m[4] * out->m[2] * out->m[13] -
out->m[12] * out->m[1] * out->m[6] +
out->m[12] * out->m[2] * out->m[5];
inv[14] = -out->m[0] * out->m[5] * out->m[14] +
out->m[0] * out->m[6] * out->m[13] +
out->m[4] * out->m[1] * out->m[14] -
out->m[4] * out->m[2] * out->m[13] -
out->m[12] * out->m[1] * out->m[6] +
out->m[12] * out->m[2] * out->m[5];
inv[3] = -out->m[1] * out->m[6] * out->m[11] +
out->m[1] * out->m[7] * out->m[10] +
out->m[5] * out->m[2] * out->m[11] -
out->m[5] * out->m[3] * out->m[10] -
out->m[9] * out->m[2] * out->m[7] +
out->m[9] * out->m[3] * out->m[6];
inv[3] = -out->m[1] * out->m[6] * out->m[11] +
out->m[1] * out->m[7] * out->m[10] +
out->m[5] * out->m[2] * out->m[11] -
out->m[5] * out->m[3] * out->m[10] -
out->m[9] * out->m[2] * out->m[7] +
out->m[9] * out->m[3] * out->m[6];
inv[7] = out->m[0] * out->m[6] * out->m[11] -
out->m[0] * out->m[7] * out->m[10] -
out->m[4] * out->m[2] * out->m[11] +
out->m[4] * out->m[3] * out->m[10] +
out->m[8] * out->m[2] * out->m[7] -
out->m[8] * out->m[3] * out->m[6];
inv[7] = out->m[0] * out->m[6] * out->m[11] -
out->m[0] * out->m[7] * out->m[10] -
out->m[4] * out->m[2] * out->m[11] +
out->m[4] * out->m[3] * out->m[10] +
out->m[8] * out->m[2] * out->m[7] -
out->m[8] * out->m[3] * out->m[6];
inv[11] = -out->m[0] * out->m[5] * out->m[11] +
out->m[0] * out->m[7] * out->m[9] +
out->m[4] * out->m[1] * out->m[11] -
out->m[4] * out->m[3] * out->m[9] -
out->m[8] * out->m[1] * out->m[7] +
out->m[8] * out->m[3] * out->m[5];
inv[11] = -out->m[0] * out->m[5] * out->m[11] +
out->m[0] * out->m[7] * out->m[9] +
out->m[4] * out->m[1] * out->m[11] -
out->m[4] * out->m[3] * out->m[9] -
out->m[8] * out->m[1] * out->m[7] +
out->m[8] * out->m[3] * out->m[5];
inv[15] = out->m[0] * out->m[5] * out->m[10] -
out->m[0] * out->m[6] * out->m[9] -
out->m[4] * out->m[1] * out->m[10] +
out->m[4] * out->m[2] * out->m[9] +
out->m[8] * out->m[1] * out->m[6] -
out->m[8] * out->m[2] * out->m[5];
inv[15] = out->m[0] * out->m[5] * out->m[10] -
out->m[0] * out->m[6] * out->m[9] -
out->m[4] * out->m[1] * out->m[10] +
out->m[4] * out->m[2] * out->m[9] +
out->m[8] * out->m[1] * out->m[6] -
out->m[8] * out->m[2] * out->m[5];
det = 1.0 / det;
for (i = 0; i < 16; i++)
out->m[i] = inv[i] * det;
return true;
}
return false;
det = 1.0 / det;
for (i = 0; i < 16; i++)
out->m[i] = inv[i] * det;
return true;
}