| 350 | } |
| 351 | |
| 352 | void mtxInverse(float* _result, const float* _a) |
| 353 | { |
| 354 | const float xx = _a[ 0]; |
| 355 | const float xy = _a[ 1]; |
| 356 | const float xz = _a[ 2]; |
| 357 | const float xw = _a[ 3]; |
| 358 | const float yx = _a[ 4]; |
| 359 | const float yy = _a[ 5]; |
| 360 | const float yz = _a[ 6]; |
| 361 | const float yw = _a[ 7]; |
| 362 | const float zx = _a[ 8]; |
| 363 | const float zy = _a[ 9]; |
| 364 | const float zz = _a[10]; |
| 365 | const float zw = _a[11]; |
| 366 | const float wx = _a[12]; |
| 367 | const float wy = _a[13]; |
| 368 | const float wz = _a[14]; |
| 369 | const float ww = _a[15]; |
| 370 | |
| 371 | float det = 0.0f; |
| 372 | det += xx * (yy*(zz*ww - zw*wz) - yz*(zy*ww - zw*wy) + yw*(zy*wz - zz*wy) ); |
| 373 | det -= xy * (yx*(zz*ww - zw*wz) - yz*(zx*ww - zw*wx) + yw*(zx*wz - zz*wx) ); |
| 374 | det += xz * (yx*(zy*ww - zw*wy) - yy*(zx*ww - zw*wx) + yw*(zx*wy - zy*wx) ); |
| 375 | det -= xw * (yx*(zy*wz - zz*wy) - yy*(zx*wz - zz*wx) + yz*(zx*wy - zy*wx) ); |
| 376 | |
| 377 | float invDet = 1.0f/det; |
| 378 | |
| 379 | _result[ 0] = +(yy*(zz*ww - wz*zw) - yz*(zy*ww - wy*zw) + yw*(zy*wz - wy*zz) ) * invDet; |
| 380 | _result[ 1] = -(xy*(zz*ww - wz*zw) - xz*(zy*ww - wy*zw) + xw*(zy*wz - wy*zz) ) * invDet; |
| 381 | _result[ 2] = +(xy*(yz*ww - wz*yw) - xz*(yy*ww - wy*yw) + xw*(yy*wz - wy*yz) ) * invDet; |
| 382 | _result[ 3] = -(xy*(yz*zw - zz*yw) - xz*(yy*zw - zy*yw) + xw*(yy*zz - zy*yz) ) * invDet; |
| 383 | |
| 384 | _result[ 4] = -(yx*(zz*ww - wz*zw) - yz*(zx*ww - wx*zw) + yw*(zx*wz - wx*zz) ) * invDet; |
| 385 | _result[ 5] = +(xx*(zz*ww - wz*zw) - xz*(zx*ww - wx*zw) + xw*(zx*wz - wx*zz) ) * invDet; |
| 386 | _result[ 6] = -(xx*(yz*ww - wz*yw) - xz*(yx*ww - wx*yw) + xw*(yx*wz - wx*yz) ) * invDet; |
| 387 | _result[ 7] = +(xx*(yz*zw - zz*yw) - xz*(yx*zw - zx*yw) + xw*(yx*zz - zx*yz) ) * invDet; |
| 388 | |
| 389 | _result[ 8] = +(yx*(zy*ww - wy*zw) - yy*(zx*ww - wx*zw) + yw*(zx*wy - wx*zy) ) * invDet; |
| 390 | _result[ 9] = -(xx*(zy*ww - wy*zw) - xy*(zx*ww - wx*zw) + xw*(zx*wy - wx*zy) ) * invDet; |
| 391 | _result[10] = +(xx*(yy*ww - wy*yw) - xy*(yx*ww - wx*yw) + xw*(yx*wy - wx*yy) ) * invDet; |
| 392 | _result[11] = -(xx*(yy*zw - zy*yw) - xy*(yx*zw - zx*yw) + xw*(yx*zy - zx*yy) ) * invDet; |
| 393 | |
| 394 | _result[12] = -(yx*(zy*wz - wy*zz) - yy*(zx*wz - wx*zz) + yz*(zx*wy - wx*zy) ) * invDet; |
| 395 | _result[13] = +(xx*(zy*wz - wy*zz) - xy*(zx*wz - wx*zz) + xz*(zx*wy - wx*zy) ) * invDet; |
| 396 | _result[14] = -(xx*(yy*wz - wy*yz) - xy*(yx*wz - wx*yz) + xz*(yx*wy - wx*yy) ) * invDet; |
| 397 | _result[15] = +(xx*(yy*zz - zy*yz) - xy*(yx*zz - zx*yz) + xz*(yx*zy - zx*yy) ) * invDet; |
| 398 | } |
| 399 | |
| 400 | void mtx3Cofactor(float* _result, const float* _a) |
| 401 | { |
no outgoing calls
no test coverage detected