VB Code:
Sub InverseMatrix(srcMatrix As D3DMATRIX, destMatrix As D3DMATRIX)
'destination matrix = invMatrix
Dim rc(4, 8)
rc(1, 1) = srcMatrix.rc11
rc(1, 2) = srcMatrix.rc12
rc(1, 3) = srcMatrix.rc13
rc(1, 4) = srcMatrix.rc14
rc(2, 1) = srcMatrix.rc21
rc(2, 2) = srcMatrix.rc22
rc(2, 3) = srcMatrix.rc23
rc(2, 4) = srcMatrix.rc24
rc(3, 1) = srcMatrix.rc31
rc(3, 2) = srcMatrix.rc32
rc(3, 3) = srcMatrix.rc33
rc(3, 4) = srcMatrix.rc34
rc(4, 1) = srcMatrix.rc41
rc(4, 2) = srcMatrix.rc42
rc(4, 3) = srcMatrix.rc43
rc(4, 4) = srcMatrix.rc44
For i = 1 To 4
For j = 5 To 8
If j = i + 4 Then
rc(i, j) = 1
Else
rc(i, j) = 0
End If
Next j
Next i
'1. Spil = 1,1
For i = 2 To 4
For j = 2 To 8
rc(i, j) = rc(i, j) * rc(1, 1) - rc(i, 1) * rc(1, j)
Next j
rc(i, 1) = 0
Next i
'2. Spil = 2,2
For i = 1 To 4
If i = 2 Then GoTo LineABCDE1
For j = 1 To 8
If j <> 2 Then rc(i, j) = rc(i, j) * rc(2, 2) - rc(i, 2) * rc(2, j)
Next j
rc(i, 2) = 0
LineABCDE1:
Next i
'3. Spil = 3,3
For i = 1 To 4
If i = 3 Then GoTo LineABCDE2
For j = 1 To 8
If j <> 3 Then rc(i, j) = rc(i, j) * rc(3, 3) - rc(i, 3) * rc(3, j)
Next j
rc(i, 3) = 0
LineABCDE2:
Next i
'4. Spil = 3,3
For i = 1 To 3
For j = 1 To 8
If j <> 4 Then rc(i, j) = rc(i, j) * rc(4, 4) - rc(i, 4) * rc(4, j)
Next j
rc(i, 4) = 0
Next i
destMatrix.rc11 = rc(1, 5) / rc(1, 1)
destMatrix.rc12 = rc(1, 6) / rc(1, 1)
destMatrix.rc13 = rc(1, 7) / rc(1, 1)
destMatrix.rc14 = rc(1, 8) / rc(1, 1)
destMatrix.rc21 = rc(2, 5) / rc(2, 2)
destMatrix.rc22 = rc(2, 6) / rc(2, 2)
destMatrix.rc23 = rc(2, 7) / rc(2, 2)
destMatrix.rc24 = rc(2, 8) / rc(2, 2)
destMatrix.rc31 = rc(3, 5) / rc(3, 3)
destMatrix.rc32 = rc(3, 6) / rc(3, 3)
destMatrix.rc33 = rc(3, 7) / rc(3, 3)
destMatrix.rc34 = rc(3, 8) / rc(3, 3)
destMatrix.rc41 = rc(4, 5) / rc(4, 4)
destMatrix.rc42 = rc(4, 6) / rc(4, 4)
destMatrix.rc43 = rc(4, 7) / rc(4, 4)
destMatrix.rc44 = rc(4, 8) / rc(4, 4)
End Sub