3D透视投影
前置理论
齐次除法:[x, y, z, w] => [wx,wy,wz]
透视投影 - 齐次除法:[x, y, z, z] => [zx,zy,1]
标准观察体(Canonical View Volume, CVV):标准立方体 x,y,z∈[-1,1]
这边讨论的是左手系一般情况下的CVV, origin在中心 (区别于DirectX
视锥体图示

分析
Pcam >>>投影>>> Pfilm >>>齐次除法>>> Pcvv
分析x:
PcamzPcamx=dPfilmx=nPfilmx=>Pfilmx=PcamznPcamx
HPfilmx=2Pcvvx=>Pcvvx=H2Pfilmx=H2nPcamz1Pcamx=zoomxPcamz1Pcamx
同理可得y:
zoomyPcamz1Pcamy
分析z:
引入Clip坐标系,即未进行齐次除法前的坐标系,四维向量 (x, y, z, w)
Pclip=(xclip,yclip,zclip,w)
透视除法定义Pclip=(xclip,yclip,zclip,Pcamz)
执行透视除法Pcvv=(Pcamzxclip,Pcamzyclip,Pcamzzclip,Pcamz)
联立分析建立Pcam 到Pcvv关系:
Pcvvz=Pcamzzclip
根据线性变换,我们可以定义
zclip=aPcamz+b
PcamzaPcamz+b=−1,Pcamz=n
PcamzaPcamz+b=1,Pcamz=f
=>
a=f−nf+n
b=f−n−2nf
将线性关系整理一下:
Pcvvx=zoomxPcamx
Pcvvy=zoomyPcamy
Pcvvz=f−nf+nPcamz+f−n−2nf
Pcvvw=Pcamz
构造Pcam到Pcvv矩阵:

注意
由于计算机实现“film"同焦距d缩放,因此焦距d并不影响最终成像。
这边体现的是不管是否真实世界还是计算机实现,要影响成像必须修改视锥体

下一篇:原创 3D透视投影 - 2.左手系DirectX的矩阵推导