/// <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); }