前情回顾

目前我们知道,通过model matrix可以将物体初始位置变换到目标位置,通过view matrix(摄像机坐标系/视图坐标系)乘以model matrix就可以得到视图坐标系下的位置(x,y,z)

现在我们来考虑以下显示的问题————投影:将空间中的物体投射成某一个平面的影像,把3D场景转换为2D平面图像

正交投影的概念

图示为正交投影,是一种平行投影,类似用平行光把物体投射到地面上;由于没有像人眼一样的光线汇集点,所以没有近大远小的效果

图-1

正交投影盒空间

正交投影盒空间是指,定义一个立方体,只有在立方体内的物体才会“可视”,其他的都看不到;即在视图变换后的结果中,选择一块区域进行渲染显示

图-2

关于摄像机:正交投影比较特殊,在视图变换后,便没有考虑摄像机位于中心这件事;其只关心投影盒空间圈起来了哪个区域,就会去显示哪个区域

正交投影平面

正交投影平面,位于投影盒正z轴方向的面,如图:

图-3

由图可知,投影平面与屏幕窗体的四个角一一对应吻合

投影空间描述

每个投影的盒子都是由六组数据组成,即上下、左右、前后四组坐标值
只有在这组坐标范围内的物体才会被渲染

图-4

正交投影盒的统一

原理: 做完了视图变换后,不需要考虑摄像机的位置,所以可以统一所有数据;每个投影的盒子都位于空间中不同的区域,所以需要统一放置在原点;每个投影的盒子都有不同的长宽高,所以需要统一

统一盒体中心点

每个投影的盒子都位于空间中不同的区域,所以需要统一将盒体的中心点放置在坐标原点

图-5

移动到原点的变换矩阵如下所示:

图-6

图-7

此变换施加到每个物体上面,物体都会随着盒体进行相应移动

统一盒体大小

统一将盒子的长宽都缩放到2的长度,即长宽高在坐标上都是-1到1;
同样的变换也施加到盒体内的物体上,这样物体顶点坐标都会被缩放到-1到1,这种坐标称为NDC坐标(标准设备坐标-Normalized Device Coordinates)

图-8

正交投影矩阵

将平移与缩放结合起来:

图-9

经过了正交投影变换后,物体的顶点会发生如下变化:
1、盒体内的顶点,坐标xyz都缩放在-1到1以内的NDC坐标
2、盒体外的顶点,坐标xyz都缩放后,至少某一维度坐标会小于-1或大于1