31-空间变换—屏幕空间变换
前情再回顾
模型变换: 三角形在世界坐标系中的初始坐标(模型坐标与世界坐标重合) 经过旋转、平移等变换得到模型矩阵 用模型矩阵乘以三角形顶点坐标,得到新的位置视图变换:
设置摄像机并对其进行平移或旋转
将摄像机的模型变换矩阵取逆,得到视图变换矩阵
用视图变换矩阵乘以三角形顶点坐标,将其变换到摄像机坐标系
投影变换:
用透视投影或正交投影矩阵乘以摄像机坐标系中的顶点
得到剪裁空间下的顶点坐标
剪裁空间坐标除以 Omega(负 Z 值)得到 NDC 坐标
屏幕空间变换
现在我们已经得到了NDC坐标,那如何将NDC坐标表示的顶点映射屏幕/窗体具体的像素位置?这就需要屏幕空间变换矩阵(本过程只计算顶点位置,仍未光栅化)
透视除法
物体的顶点经过透视投影矩阵变换后,会得到一个剪裁空间的顶点坐标,即 W=-Ze
只有x/y/z都除以W之后,才能得到最终的NDC坐标

注意:
这一步会出现W=0的可能,所以在除法前已经做了剔除,后面会专门讲解剔除算法
正交投影后也需要除以W,保存流程一致性,只不过W=1
将NDC改造到0-1
物体顶点的NDC坐标范围在-1到1之间,可以对其进行改造,变换到0-1之间(本步骤为线性)

屏幕空间与NDC空间
正交投影与透视投影最终的结果,都是得到了物体顶点的NDC坐标;
改造后是0-1的区间,与屏幕的对应关系如下图所示:

盒体内物体顶点,改造为0-1区间后,其x/y坐标,可视作在屏幕上的比例,从而可以计算在屏幕上的位置(就像前面的uv坐标那样)

屏幕空间变换
对于任何一个NDC坐标下的顶点,变换到屏幕空间,其x/y/z都会经历如下过程:

从而可以得到屏幕空间变换矩阵为:

All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
