透视投影矩阵推导:参考:https://www.cnblogs.com/graphics/archive/2012/07/25/2582119.html
具体推到就不写了就说一下推导流程,如下图:
首先是把
p(x,y,z)
p
(
x
,
y
,
z
)
点映射到
p′(x′,y′,z′)
p
′
(
x
′
,
y
′
,
z
′
)
让后根据宽高比把坐标规范到[-1,1]之间,得到
p′′(x′′,y′′,z′′)
p
″
(
x
″
,
y
″
,
z
″
)
在计算过程当中z的值最为重要(深度缓存需要),因为在插值计算设计到纹理贴图校正,需要对
1z
1
z
进行插值,所以在z用一次表达是表示算出系数,然后倒推出矩阵。
透视除法的理解应该是从透视投影矩阵来的,最后计算投影矩阵的时候为了方便乘了z,所以要
在片段着色器之前进行透视除法。
空间裁剪:对于opengl空间范围为
−1≤x≤1,−1≤y≤1,−1≤z≤1
−
1
≤
x
≤
1
,
−
1
≤
y
≤
1
,
−
1
≤
z
≤
1
这个其实在投影矩阵推导的时候就已经体现了,但是注意在判断裁剪的时候如果还没有做透视除法要和w分量比较 因为w分量在矩阵推导的时候就知道了其实就是z。
视口变换: