示例#1
0
        public static Matrix ViewMatrix(Matrix M)
        {
            Vector3 CameraPosition = new Vector3(M[0, 0], M[1, 0], M[2, 0]);
            Vector3 CameraTarget   = new Vector3(M[0, 1], M[1, 1], M[2, 1]);
            Vector3 UpVector       = new Vector3(M[0, 2], M[1, 2], M[2, 2]);

            UpVector = UpVector.ToVersor();
            Vector3 ZAxis = CameraPosition - CameraTarget;

            ZAxis = ZAxis.ToVersor();
            Vector3 XAxis = Vector3.CrossProduct(UpVector, ZAxis);

            XAxis = XAxis.ToVersor();
            Vector3 YAxis = Vector3.CrossProduct(ZAxis, XAxis);

            return(new Matrix(new double[, ] {
                { XAxis.first, XAxis.second, XAxis.third, 0 }, { YAxis.first, YAxis.second, YAxis.third, 0 }, { -ZAxis.first, -ZAxis.second, -ZAxis.third, 0 }, { -Vector3.DotProduct(XAxis, CameraPosition), -Vector3.DotProduct(YAxis, CameraPosition), Vector3.DotProduct(ZAxis, CameraPosition), 1 }
            }));
        }