最近在研究透视投影,Twinsen大神的神贴有非常详细的推导过程(传送门),这里做一下学习笔记。
首先是两点基础的原理:
1.P经过矩阵M变换后得到P’点,如果知道P(x,y,z)和变换后的P’(x’,y’,z’),只要P’点的各个分量x’,y’,z’可以表示成原分量x,y,z的线性表示,那么就可以反推出变换矩阵M。如P(x,y,z),变换后的P’(2x+3y,7z,x+2y+3z),则可以推导出变换矩阵为:
2.为了方便裁剪,顶点最终会被变换到一个叫做规则观察体(CVV)中,它是一个x,y,z均为[-1,1]的立方体,由于透视投影的视景体是锥形,所以要将视景体与CVV进行映射,就需要一个线性插值的过程,将[left,right]变换到[-1,1],将[bottom,top]变换到[-1,1],将[near,far]变换到[-1,1],如图:
下面简单的写下推导的主要步骤。
图中P(x,y,z),投影平面为近平面,投影点P’(x’,y’,z’),那么根据相似三角形有x/z=x’/z’,其中z’=-N,所以可以求得x’=-Nx/z,同理得y’=-Ny/z,所以P’(-Nx/z,-Ny/z,-N)