前言
正射投影矩阵的目标是将几何体顶点坐标转为标准的单位立方体(NDC)。
- x轴范围 [-1,1]
- y轴范围 [-1,1]
- z轴范围 [-1,1]
定义可视空间

- left: 近裁切面左边界
- right: 近裁切面右边界
- top: 近裁切面上边界
- bottom: 近裁切面下边界
- near: 近裁切面位置
- far: 远裁切面位置
线性变换
对于任意一维坐标v,从范围 [Vmin,Vmax]映射到范围 [−1,1],有以下方式:
v′=halfVv−Vmin−halfV
其中:halfV=2Vmax−Vmin
将等式拆成两部分:
v′=halfVv−Vmin−halfVhalfV
v′=halfVv−Vmin−1
v′=(Vmax−Vmin)/2v−Vmin−1
最终得到:
v′=Vmax−Vminv−Vmin∗2−1
逐个轴推导
x轴
已知:
x′=right−leftx−left∗2−1
从等式右侧提取出x:
x′=right−leftx−left∗2−1
x′=(right−leftx−right−leftleft)∗2−1
x′=right−left2x−right−left2left−1
x′=right−left2x−right−left2left−right−leftright−left
x′=right−left2∗x−right−left2left+right−left
x′=right−left2∗x−right−leftleft+right
最终得出:
x′=right−left2∗x−right−leftright+left
y轴
推导过程同x轴
y′=top−bottom2∗y−top−bottomtop+bottom
z轴
推导过程同x轴,注意在WebGl系统中,采用的是右手坐标系,近裁切面z坐标为正值,远裁切面z坐标为负值,因此最终结果为:
z′=far−near−2∗z−far−nearfar+near
构造矩阵
将上述各轴推导过程构造为矩阵形式:
Morthographic=right−left20000top−bottom20000far−near−20−right−leftright+left−top−bottomtop+bottom−far−nearfar+near1
总结
推导过程有任何错误或有可优化处请指正。