MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / mtxInverse

Function mtxInverse

Source/3rdParty/bx/src/math.cpp:352–398  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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 {

Callers 4

getPosMethod · 0.85
convertToNodeSpaceMethod · 0.85
convertToNodeSpace3Method · 0.85
intersectFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected