public static float4x4 Parse( string _Source )
{
string[] Terms = _Source.Split( new char[] { ';' } );
if ( Terms.Length != 16 )
throw new Exception( "Source string must have 16 terms!" );
float4x4 Result = new float4x4();
Result.m[0,0] = float.Parse( Terms[4 * 0 + 0] );
Result.m[0,1] = float.Parse( Terms[4 * 0 + 1] );
Result.m[0,2] = float.Parse( Terms[4 * 0 + 2] );
Result.m[0,3] = float.Parse( Terms[4 * 0 + 3] );
Result.m[1,0] = float.Parse( Terms[4 * 1 + 0] );
Result.m[1,1] = float.Parse( Terms[4 * 1 + 1] );
Result.m[1,2] = float.Parse( Terms[4 * 1 + 2] );
Result.m[1,3] = float.Parse( Terms[4 * 1 + 3] );
Result.m[2,0] = float.Parse( Terms[4 * 2 + 0] );
Result.m[2,1] = float.Parse( Terms[4 * 2 + 1] );
Result.m[2,2] = float.Parse( Terms[4 * 2 + 2] );
Result.m[2,3] = float.Parse( Terms[4 * 2 + 3] );
Result.m[3,0] = float.Parse( Terms[4 * 3 + 0] );
Result.m[3,1] = float.Parse( Terms[4 * 3 + 1] );
Result.m[3,2] = float.Parse( Terms[4 * 3 + 2] );
Result.m[3,3] = float.Parse( Terms[4 * 3 + 3] );
return Result;
}