public static float4x4 operator *( float4x4 _Op0, float4x4 _Op1 )
{
float4x4 Ret = new float4x4();
Ret.m[0, 0] = _Op0.m[0, 0]*_Op1.m[0, 0] + _Op0.m[0, 1]*_Op1.m[1, 0] + _Op0.m[0, 2]*_Op1.m[2, 0] + _Op0.m[0, 3]*_Op1.m[3, 0];
Ret.m[0, 1] = _Op0.m[0, 0]*_Op1.m[0, 1] + _Op0.m[0, 1]*_Op1.m[1, 1] + _Op0.m[0, 2]*_Op1.m[2, 1] + _Op0.m[0, 3]*_Op1.m[3, 1];
Ret.m[0, 2] = _Op0.m[0, 0]*_Op1.m[0, 2] + _Op0.m[0, 1]*_Op1.m[1, 2] + _Op0.m[0, 2]*_Op1.m[2, 2] + _Op0.m[0, 3]*_Op1.m[3, 2];
Ret.m[0, 3] = _Op0.m[0, 0]*_Op1.m[0, 3] + _Op0.m[0, 1]*_Op1.m[1, 3] + _Op0.m[0, 2]*_Op1.m[2, 3] + _Op0.m[0, 3]*_Op1.m[3, 3];
Ret.m[1, 0] = _Op0.m[1, 0]*_Op1.m[0, 0] + _Op0.m[1, 1]*_Op1.m[1, 0] + _Op0.m[1, 2]*_Op1.m[2, 0] + _Op0.m[1, 3]*_Op1.m[3, 0];
Ret.m[1, 1] = _Op0.m[1, 0]*_Op1.m[0, 1] + _Op0.m[1, 1]*_Op1.m[1, 1] + _Op0.m[1, 2]*_Op1.m[2, 1] + _Op0.m[1, 3]*_Op1.m[3, 1];
Ret.m[1, 2] = _Op0.m[1, 0]*_Op1.m[0, 2] + _Op0.m[1, 1]*_Op1.m[1, 2] + _Op0.m[1, 2]*_Op1.m[2, 2] + _Op0.m[1, 3]*_Op1.m[3, 2];
Ret.m[1, 3] = _Op0.m[1, 0]*_Op1.m[0, 3] + _Op0.m[1, 1]*_Op1.m[1, 3] + _Op0.m[1, 2]*_Op1.m[2, 3] + _Op0.m[1, 3]*_Op1.m[3, 3];
Ret.m[2, 0] = _Op0.m[2, 0]*_Op1.m[0, 0] + _Op0.m[2, 1]*_Op1.m[1, 0] + _Op0.m[2, 2]*_Op1.m[2, 0] + _Op0.m[2, 3]*_Op1.m[3, 0];
Ret.m[2, 1] = _Op0.m[2, 0]*_Op1.m[0, 1] + _Op0.m[2, 1]*_Op1.m[1, 1] + _Op0.m[2, 2]*_Op1.m[2, 1] + _Op0.m[2, 3]*_Op1.m[3, 1];
Ret.m[2, 2] = _Op0.m[2, 0]*_Op1.m[0, 2] + _Op0.m[2, 1]*_Op1.m[1, 2] + _Op0.m[2, 2]*_Op1.m[2, 2] + _Op0.m[2, 3]*_Op1.m[3, 2];
Ret.m[2, 3] = _Op0.m[2, 0]*_Op1.m[0, 3] + _Op0.m[2, 1]*_Op1.m[1, 3] + _Op0.m[2, 2]*_Op1.m[2, 3] + _Op0.m[2, 3]*_Op1.m[3, 3];
Ret.m[3, 0] = _Op0.m[3, 0]*_Op1.m[0, 0] + _Op0.m[3, 1]*_Op1.m[1, 0] + _Op0.m[3, 2]*_Op1.m[2, 0] + _Op0.m[3, 3]*_Op1.m[3, 0];
Ret.m[3, 1] = _Op0.m[3, 0]*_Op1.m[0, 1] + _Op0.m[3, 1]*_Op1.m[1, 1] + _Op0.m[3, 2]*_Op1.m[2, 1] + _Op0.m[3, 3]*_Op1.m[3, 1];
Ret.m[3, 2] = _Op0.m[3, 0]*_Op1.m[0, 2] + _Op0.m[3, 1]*_Op1.m[1, 2] + _Op0.m[3, 2]*_Op1.m[2, 2] + _Op0.m[3, 3]*_Op1.m[3, 2];
Ret.m[3, 3] = _Op0.m[3, 0]*_Op1.m[0, 3] + _Op0.m[3, 1]*_Op1.m[1, 3] + _Op0.m[3, 2]*_Op1.m[2, 3] + _Op0.m[3, 3]*_Op1.m[3, 3];
return Ret;
}