//public idVec6 this[int index] { get { return mat[index]; } }
 public static idMat6 operator *(idMat6 a, idMat6 b)
 {
     idMat6 dst = new idMat6();
     //float[] m1Ptr = this;
     //float[] m2Ptr = a;
     //float[] dstPtr = null;
     for (int i = 0; i < 6; i++)
     {
         for (int j = 0; j < 6; j++)
         {
             //            *dstPtr = m1Ptr[0] * m2Ptr[ 0 * 6 + j ]
             //                    + m1Ptr[1] * m2Ptr[ 1 * 6 + j ]
             //                    + m1Ptr[2] * m2Ptr[ 2 * 6 + j ]
             //                    + m1Ptr[3] * m2Ptr[ 3 * 6 + j ]
             //                    + m1Ptr[4] * m2Ptr[ 4 * 6 + j ]
             //                    + m1Ptr[5] * m2Ptr[ 5 * 6 + j ];
             //            dstPtr++;
         }
         //m1Ptr += 6;
     }
     return dst;
 }
 public idMat6 Transpose()
 {
     idMat6 transpose = new idMat6();
     for (int i = 0; i < 6; i++)
         for (int j = 0; j < 6; j++)
             transpose[i][j] = mat[j][i];
     return transpose;
 }
 public bool Compare(ref idMat6 a, float epsilon)
 {
     float[] ptr1 = mat;
     float[] ptr2 = a.mat;
     for (int i = 0; i < 6 * 6; i++)
         if (idMath.Fabs(ptr1[i] - ptr2[i]) > epsilon)
             return false;
     return true;
 }
 public bool Compare(ref idMat6 a)
 {
     float[] ptr1 = mat;
     float[] ptr2 = a.mat;
     for (int i = 0; i < 6 * 6; i++)
         if (ptr1[i] != ptr2[i])
             return false;
     return true;
 }
 public idMat6 opSub(ref idMat6 a)
 {
     idVec6[] a_mat = a.mat;
     mat[0].p[0] -= a_mat[0].p[0]; mat[0].p[1] -= a_mat[0].p[1]; mat[0].p[2] -= a_mat[0].p[2]; mat[0].p[3] -= a_mat[0].p[3]; mat[0].p[4] -= a_mat[0].p[4]; mat[0].p[5] -= a_mat[0].p[5];
     mat[1].p[0] -= a_mat[1].p[0]; mat[1].p[1] -= a_mat[1].p[1]; mat[1].p[2] -= a_mat[1].p[2]; mat[1].p[3] -= a_mat[1].p[3]; mat[1].p[4] -= a_mat[1].p[4]; mat[1].p[5] -= a_mat[1].p[5];
     mat[2].p[0] -= a_mat[2].p[0]; mat[2].p[1] -= a_mat[2].p[1]; mat[2].p[2] -= a_mat[2].p[2]; mat[2].p[3] -= a_mat[2].p[3]; mat[2].p[4] -= a_mat[2].p[4]; mat[2].p[5] -= a_mat[2].p[5];
     mat[3].p[0] -= a_mat[3].p[0]; mat[3].p[1] -= a_mat[3].p[1]; mat[3].p[2] -= a_mat[3].p[2]; mat[3].p[3] -= a_mat[3].p[3]; mat[3].p[4] -= a_mat[3].p[4]; mat[3].p[5] -= a_mat[3].p[5];
     mat[4].p[0] -= a_mat[4].p[0]; mat[4].p[1] -= a_mat[4].p[1]; mat[4].p[2] -= a_mat[4].p[2]; mat[4].p[3] -= a_mat[4].p[3]; mat[4].p[4] -= a_mat[4].p[4]; mat[4].p[5] -= a_mat[4].p[5];
     mat[5].p[0] -= a_mat[5].p[0]; mat[5].p[1] -= a_mat[5].p[1]; mat[5].p[2] -= a_mat[5].p[2]; mat[5].p[3] -= a_mat[5].p[3]; mat[5].p[4] -= a_mat[5].p[4]; mat[5].p[5] -= a_mat[5].p[5];
     return this;
 }
 public idMat6 opAdd(ref idMat6 a)
 {
     idVec6[] a_mat = a.mat;
     mat[0].p[0] += a_mat[0].p[0]; mat[0].p[1] += a_mat[0].p[1]; mat[0].p[2] += a_mat[0].p[2]; mat[0].p[3] += a_mat[0].p[3]; mat[0].p[4] += a_mat[0].p[4]; mat[0].p[5] += a_mat[0].p[5];
     mat[1].p[0] += a_mat[1].p[0]; mat[1].p[1] += a_mat[1].p[1]; mat[1].p[2] += a_mat[1].p[2]; mat[1].p[3] += a_mat[1].p[3]; mat[1].p[4] += a_mat[1].p[4]; mat[1].p[5] += a_mat[1].p[5];
     mat[2].p[0] += a_mat[2].p[0]; mat[2].p[1] += a_mat[2].p[1]; mat[2].p[2] += a_mat[2].p[2]; mat[2].p[3] += a_mat[2].p[3]; mat[2].p[4] += a_mat[2].p[4]; mat[2].p[5] += a_mat[2].p[5];
     mat[3].p[0] += a_mat[3].p[0]; mat[3].p[1] += a_mat[3].p[1]; mat[3].p[2] += a_mat[3].p[2]; mat[3].p[3] += a_mat[3].p[3]; mat[3].p[4] += a_mat[3].p[4]; mat[3].p[5] += a_mat[3].p[5];
     mat[4].p[0] += a_mat[4].p[0]; mat[4].p[1] += a_mat[4].p[1]; mat[4].p[2] += a_mat[4].p[2]; mat[4].p[3] += a_mat[4].p[3]; mat[4].p[4] += a_mat[4].p[4]; mat[4].p[5] += a_mat[4].p[5];
     mat[5].p[0] += a_mat[5].p[0]; mat[5].p[1] += a_mat[5].p[1]; mat[5].p[2] += a_mat[5].p[2]; mat[5].p[3] += a_mat[5].p[3]; mat[5].p[4] += a_mat[5].p[4]; mat[5].p[5] += a_mat[5].p[5];
     return this;
 }
 public idMat6 opMul(ref idMat6 a)
 {
     this = this * a;
     return this;
 }