XMMATRIX XMMatrixPerspectiveFovRH(float fov弧度, float aspect, float nearZ, float farZ)
将传入的ViewSpace下的坐标视为右手系下的坐标。
平截头体在Z轴负向。
P坐标(0,0,-nearZ)
平移,使P点到原点O。
矩阵M1
ViewSpace
近平面半高MP = tan(fov/2)* nearZ
近平面半宽AM = tan(fov/2)*nearZ * aspect
深度差PP’ = farZ - nearZ
原点缩放,使 近平面半高为nearZ,使 近平面半宽为nearZ,使 远平面半高位farZ,使 远平面半宽为farZ,使 深度差为farZ;再将Z负轴的点,关于原点镜像到Z正向上去。
矩阵M2
ClipSpacePos = M2* M1 * ViewSpacePos
矩阵M3 = M2 * M1
将M3 的4行3列改为-1, 4行4列改为0
ClipSpacePos.w = ViewSpacePos.z。保留观察空间的ViewDepth。
由于平截头体在负轴,-1负号将深度转正。w分量范围 [ nearZ, farZ ]
ClipSpacePos/ClipSpacePos.w, 将点限制在[-1,1],[-1,1],[0,1]之间。
XMMATRIX XMMatrixPerspectiveFovLH(float fov弧度, float aspect, float nearZ, float farZ)
将传入的ViewSpace下的坐标视为左系下的坐标。
平截头体在Z轴正向。