透视投影以视锥体为核心,将视锥体的点对应到((-1,-1,-1) - (1,1,1))的立方体盒,(视锥体 o 裁剪坐标系)。
1. 投影面
(d)
高为(2),垂直于(z)轴的平面,距原点的距离为
[frac1d = tan(frac{alpha}2) Rightarrow d=frac1{tan(frac{alpha}2)}=cot(frac{alpha}2)
]
((x_d, y_d))
任意点(P) 点投影到投影平面,其投影关系为:
[frac{y_d}d=frac yz Rightarrow y_d = frac {ycdot d}z = frac {ycdot cot(frac{alpha}2)}z
]
同理,
[x_d = frac {xcdot cot(frac{alpha}2)}z
]
由于投影面(XY)存在宽高比 (ar=frac WH),视锥体内(x_d) 还需要变换到([-1,1])内,
[x_{da} = frac{x_d}{ar}
]
((x_{da}, y_d))齐次化
用齐次坐标表示上述((x_{da},y_d))坐标为
[egin{pmatrix}
x_{da}\
y_d\
0\
1
end{pmatrix}=egin{pmatrix}
frac {xcdot cot(frac{alpha}2)}{arcdot z}\
frac {ycdot cot(frac{alpha}2)}z\
0\
1
end{pmatrix} = frac1z egin{pmatrix}
frac {xcdot cot(frac{alpha}2)}{ar}\
ycdot cot(frac{alpha}2)\
0\
z
end{pmatrix}sim egin{pmatrix}
frac {xcdot cot(frac{alpha}2)}{ar}\
ycdot cot(frac{alpha}2)\
0\
z
end{pmatrix}
]
上述坐标用矩阵可以描述为
[egin{pmatrix}
frac1{ar} &0 & 0 & 0\
0 &1 & 0 & 0\
0 &0 & 1 & 0\
0 &0 & 0 & 1\
end{pmatrix}egin{pmatrix}
cot(frac{alpha}2) & 0 & 0 & 0\
0 & cot(frac{alpha}2) & 0 & 0\
0 & 0 & 0 & 0\
0 & 0 & 1 & 0\
end{pmatrix}egin{pmatrix}
x\
y\
z\
1\
end{pmatrix} ag{A-1}
]
在这里,没有使用(z)值,造成了中间矩阵为奇异阵。由于(z=0),上述映射关系不是线性变换,更不是线性同构。
裁剪坐标系
为了使投影成为一种变换,需要将(z)值考虑进来,我们考虑线段的缩放: ([n,f] o[-1,1]) ,设(f(z) = Az + B),经过透视除法之后结果变为下面的式子
[A + frac Bz
]
将(n,f)代入上式,得
[A + frac Bn = -1 \
A + frac Bf = 1 \
]
[left.egin{matrix}
A + frac Bn = -1 \
A + frac Bf = 1
end{matrix}
ight}Rightarrow B(frac1f-frac1n) = 2 Rightarrow B = frac{2nf}{n-f}
]
[left.egin{matrix}
B = frac{2nf}{n-f} \
A + frac Bf = 1
end{matrix}
ight}Rightarrow A = 1 - frac{2n}{n-f} = frac{-n-f}{n-f}
]
我们将((A-1))式中第三行替换成([0 ,0, A, B]), ((A-1))式变成
[egin{pmatrix}
frac1{ar} &0 & 0 & 0\
0 &1 & 0 & 0\
0 &0 & 1 & 0\
0 &0 & 0 & 1\
end{pmatrix}egin{pmatrix}
cot(frac{alpha}2) & 0 & 0 & 0\
0 & cot(frac{alpha}2) & 0 & 0\
0 & 0 & frac{-n-f}{n-f} & frac{2nf}{n-f}
\
0 & 0 & 1 & 0\
end{pmatrix}egin{pmatrix}
x\
y\
z\
1\
end{pmatrix} =egin{pmatrix}
frac {xcdot cot(frac{alpha}2)}{ar}\
ycdot cot(frac{alpha}2)\
Az+B\
z
end{pmatrix}sim egin{pmatrix}
frac {xcdot cot(frac{alpha}2)}{zcdot ar}\
frac{ycdot cot(frac{alpha}2)}z\
A+frac Bz\
1
end{pmatrix} ag{A-2}
]
最终的变换矩阵如下:
[egin{pmatrix}
frac1{ar}cot(frac{alpha}2) & 0 & 0 & 0\
0 & cot(frac{alpha}2) & 0 & 0\
0 & 0 & frac{-n-f}{n-f} & frac{2nf}{n-f}
\
0 & 0 & 1 & 0\
end{pmatrix} ag{A-3}
]
在用投影矩阵乘上顶点坐标之后,顶点坐标被变换到我们所说的裁剪坐标系之下,在执行透视除法之后顶点坐标被变换到了 NDC 坐标系(NormalizedDeviceCoordinates)之下。
在(alpha eq 0,n eq f)的情况下,((A-3))式矩阵可逆矩阵,其变换为线性变换,并且是同构变换。