Untitled

From Sludgy Mockingbird, 2 Months ago, written in Plain Text, viewed 79 times. This paste will croak in 1 Second.
URL http://codebin.org/view/5ba380cd Embed
Download Paste or View Raw
  1. inline Matrix4x4 InvertMatrix()
  2.         {
  3.                 Matrix4x4 inv;
  4.                 float det;
  5.                 int i;
  6.  
  7.                 inv.m[0] = m[5] * m[10] * m[15] -
  8.                         m[5] * m[11] * m[14] -
  9.                         m[9] * m[6] * m[15] +
  10.                         m[9] * m[7] * m[14] +
  11.                         m[13] * m[6] * m[11] -
  12.                         m[13] * m[7] * m[10];
  13.  
  14.                 inv.m[4] = -m[4] * m[10] * m[15] +
  15.                         m[4] * m[11] * m[14] +
  16.                         m[8] * m[6] * m[15] -
  17.                         m[8] * m[7] * m[14] -
  18.                         m[12] * m[6] * m[11] +
  19.                         m[12] * m[7] * m[10];
  20.  
  21.                 inv.m[8] = m[4] * m[9] * m[15] -
  22.                         m[4] * m[11] * m[13] -
  23.                         m[8] * m[5] * m[15] +
  24.                         m[8] * m[7] * m[13] +
  25.                         m[12] * m[5] * m[11] -
  26.                         m[12] * m[7] * m[9];
  27.  
  28.                 inv.m[12] = -m[4] * m[9] * m[14] +
  29.                         m[4] * m[10] * m[13] +
  30.                         m[8] * m[5] * m[14] -
  31.                         m[8] * m[6] * m[13] -
  32.                         m[12] * m[5] * m[10] +
  33.                         m[12] * m[6] * m[9];
  34.  
  35.                 inv.m[1] = -m[1] * m[10] * m[15] +
  36.                         m[1] * m[11] * m[14] +
  37.                         m[9] * m[2] * m[15] -
  38.                         m[9] * m[3] * m[14] -
  39.                         m[13] * m[2] * m[11] +
  40.                         m[13] * m[3] * m[10];
  41.  
  42.                 inv.m[5] = m[0] * m[10] * m[15] -
  43.                         m[0] * m[11] * m[14] -
  44.                         m[8] * m[2] * m[15] +
  45.                         m[8] * m[3] * m[14] +
  46.                         m[12] * m[2] * m[11] -
  47.                         m[12] * m[3] * m[10];
  48.  
  49.                 inv.m[9] = -m[0] * m[9] * m[15] +
  50.                         m[0] * m[11] * m[13] +
  51.                         m[8] * m[1] * m[15] -
  52.                         m[8] * m[3] * m[13] -
  53.                         m[12] * m[1] * m[11] +
  54.                         m[12] * m[3] * m[9];
  55.  
  56.                 inv.m[13] = m[0] * m[9] * m[14] -
  57.                         m[0] * m[10] * m[13] -
  58.                         m[8] * m[1] * m[14] +
  59.                         m[8] * m[2] * m[13] +
  60.                         m[12] * m[1] * m[10] -
  61.                         m[12] * m[2] * m[9];
  62.  
  63.                 inv.m[2] = m[1] * m[6] * m[15] -
  64.                         m[1] * m[7] * m[14] -
  65.                         m[5] * m[2] * m[15] +
  66.                         m[5] * m[3] * m[14] +
  67.                         m[13] * m[2] * m[7] -
  68.                         m[13] * m[3] * m[6];
  69.  
  70.                 inv.m[6] = -m[0] * m[6] * m[15] +
  71.                         m[0] * m[7] * m[14] +
  72.                         m[4] * m[2] * m[15] -
  73.                         m[4] * m[3] * m[14] -
  74.                         m[12] * m[2] * m[7] +
  75.                         m[12] * m[3] * m[6];
  76.  
  77.                 inv.m[10] = m[0] * m[5] * m[15] -
  78.                         m[0] * m[7] * m[13] -
  79.                         m[4] * m[1] * m[15] +
  80.                         m[4] * m[3] * m[13] +
  81.                         m[12] * m[1] * m[7] -
  82.                         m[12] * m[3] * m[5];
  83.  
  84.                 inv.m[14] = -m[0] * m[5] * m[14] +
  85.                         m[0] * m[6] * m[13] +
  86.                         m[4] * m[1] * m[14] -
  87.                         m[4] * m[2] * m[13] -
  88.                         m[12] * m[1] * m[6] +
  89.                         m[12] * m[2] * m[5];
  90.  
  91.                 inv.m[3] = -m[1] * m[6] * m[11] +
  92.                         m[1] * m[7] * m[10] +
  93.                         m[5] * m[2] * m[11] -
  94.                         m[5] * m[3] * m[10] -
  95.                         m[9] * m[2] * m[7] +
  96.                         m[9] * m[3] * m[6];
  97.  
  98.                 inv.m[7] = m[0] * m[6] * m[11] -
  99.                         m[0] * m[7] * m[10] -
  100.                         m[4] * m[2] * m[11] +
  101.                         m[4] * m[3] * m[10] +
  102.                         m[8] * m[2] * m[7] -
  103.                         m[8] * m[3] * m[6];
  104.  
  105.                 inv.m[11] = -m[0] * m[5] * m[11] +
  106.                         m[0] * m[7] * m[9] +
  107.                         m[4] * m[1] * m[11] -
  108.                         m[4] * m[3] * m[9] -
  109.                         m[8] * m[1] * m[7] +
  110.                         m[8] * m[3] * m[5];
  111.  
  112.                 inv.m[15] = m[0] * m[5] * m[10] -
  113.                         m[0] * m[6] * m[9] -
  114.                         m[4] * m[1] * m[10] +
  115.                         m[4] * m[2] * m[9] +
  116.                         m[8] * m[1] * m[6] -
  117.                         m[8] * m[2] * m[5];
  118.  
  119.                 det = m[0] * inv.m[0] + m[1] * inv.m[4] + m[2] * inv.m[8] + m[3] * inv.m[12];
  120.  
  121.                 if (det == 0)
  122.                 {
  123.                         Matrix4x4 id;
  124.                         return id;
  125.                 }
  126.  
  127.                 det = 1.0f / det;
  128.  
  129.                 for (i = 0; i < 16; i++)
  130.                         inv.m[i] = inv.m[i] * det;
  131.  
  132.                 return inv;

Reply to "Untitled"

Here you can reply to the paste above