投影矩阵推导

1、正交投影

image.png

上图就是unity中的摄像机,把摄像机设置为正交投影,我们可以在inspector界面调整clipplane的大小,可以发现无论怎么调整,far和near都不会相等,下面会对在推导的过程中对这一现象做出解释。
在做投影的时候,x和y的值会被缩放到[-1,1],而z的值在dx里面是[0,1],在opengl是[-1,1]。
现在设六面体的宽是w,高是h,近裁剪平面距摄像机距离是n,远裁剪平面距摄像机的距离是f。
那么x的取值范围就是-w/2 就把x映射到了-1到1之间。那么映射之后的x'=2x/w。
同理,y也需要映射到-1到1之间,那么映射之后的y'=2y/h
z有点不一样,xy因为默认在中心所以不需要平移,只需要缩放就行了。z的取值范围在[n,f]之间。写成不等式的形式,
n这就是f和n不能相等的原因)0<(z-n)/(f-n)<1,这就把z映射到了[0,1],如果要映射到[-1,1],就再给不等式两边乘以2,然后减去1就行了。

正交投影.jpg

有了上面的关系式,我们很轻松能把这个过程用4x4矩阵来表示:


正交投影矩阵

你可能感兴趣的:(投影矩阵推导)