Beispiel #1
0
        /// <summary>
        /// 创建视图矩阵
        /// 视图矩阵为右手坐标系,我们之前使用的都是左手坐标系
        /// 所以需要先转成右手坐标系
        /// </summary>
        /// <param name="eyePos"></param>
        /// <param name="nUp"></param>
        /// <param name="lookAtPos"></param>
        /// <returns></returns>
        public static Matrix4x4 BuildViewMatrix(Vector4 eyePos, Vector4 nUp, Vector4 lookAtPos)
        {
            Vector4 forward = lookAtPos - eyePos;

            forward.Normalize();
            Vector4 side = Vector4.Corss(nUp, forward);

            side.Normalize();
            Vector4 up = Vector4.Corss(forward, side);

            up.Normalize();

            Matrix4x4 m1 = new Matrix4x4
                           (
                1, 0, 0, -eyePos.x,
                0, 1, 0, -eyePos.y,
                0, 0, 1, -eyePos.z,
                0, 0, 0, 1
                           );

            Matrix4x4 m2 = new Matrix4x4
                           (
                side.x, side.y, side.z, 0,
                up.x, up.y, up.z, 0,
                forward.x, forward.y, forward.z, 0,
                0, 0, 0, 1
                           );

            Matrix4x4 m3 = Matrix4x4.identityMatrix;

            m3[2, 2] = -1;
            return(m3 * m2 * m1);
        }