public static Matrix43 RotationMatrix(float x, float y, float z) { float cosx = (float)Math.Cos(x / 180.0f * Math.PI); float sinx = (float)Math.Sin(x / 180.0f * Math.PI); float cosy = (float)Math.Cos(y / 180.0f * Math.PI); float siny = (float)Math.Sin(y / 180.0f * Math.PI); float cosz = (float)Math.Cos(z / 180.0f * Math.PI); float sinz = (float)Math.Sin(z / 180.0f * Math.PI); Matrix43 m = Identity; float * p = (float *)&m; p[5] = cosx; p[6] = -sinx; p[9] = sinx; p[10] = cosx; Matrix43 m2 = Identity; float * p2 = (float *)&m2; p2[0] = cosy; p2[2] = siny; p2[8] = -siny; p2[10] = cosy; Matrix43 m3 = Identity; float * p3 = (float *)&m3; p3[0] = cosz; p3[1] = -sinz; p3[4] = sinz; p3[5] = cosz; m.Multiply(&m2); m.Multiply(&m3); //p[0] = cosy * cosz; //p[1] = cosy * sinz; //p[2] = -siny; //p[4] = (sinx * siny * cosz - cosx * sinz); //p[5] = (sinx * siny * sinz + cosx * cosz); //p[6] = sinx * cosy; //p[8] = (cosx * siny * cosz + sinx * sinz); //p[9] = (cosx * siny * sinz - sinx * cosz); //p[10] = cosx * cosy; return(m); }