/** MATRICI DI TRASFORMAZIONE */
        /** @return Matrice d'identità */
        public static Mat4 Identity()
        {
            Mat4 n = new Mat4();
            for (int i = 0; i < 16; i++)
                n.m[i] = 0;

            n.m[0] = n.m[5] = n.m[10] = n.m[15] = 1;
            return n;
        }
 public IMatrix(Mat4 direct, Mat4 inverse)
 {
     Direct = direct;
     Inverse = inverse;
 }
 /**
  * Inizializza la matrice a partire da un'altra
  * @param m
  */
 public Mat4(Mat4 m)
 {
     this.m = m.ToFloatArray();
 }
        /**
         * Prodotto tra matrici
         * @param m2 seconda matrice
         * @return matrice risultante this*m2
         */
        public Mat4 Dot(Mat4 m2)
        {
            Mat4 n = new Mat4();

            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 4; j++)
                    n.SetElement(i, j,
                            this.Row(i).Dot(m2.Column(j))
                    );

            return n;
        }