games101学习笔记_投影变换

View/Camera transformation

视角转换

要将一个摄像机视角转换到原点坐标,需要经历以下步骤。
转换步骤简述
1.先将e平移到远点。
2.旋转g-Z
3.旋转tY
4.旋转 (g x t)X

数字表示

坐标变换的数学表达方式
先进行平移变换。考虑到将g,t,(g x t)转换到-Z,Y,X变换困难,所以选择简单的方式。直接逆向思维,将变换过程反过来,也就是将-Z,Y,X转换为g,t,(g x t)。
直接写出上图中左下角第一个矩阵,将每一个向量作为矩阵的列向量(这是我们变换的最终目标),然后因为旋转矩阵是正交矩阵,所以图下方两个矩阵的关系应该为互逆矩阵,并且也是互为转置矩阵。可以由左边的矩阵推出右边的矩阵,这个矩阵也就是我们想 要求的矩阵。

Projection transformation

投影变换

正交投影(上图左)并不会产生近大远小的效果,而透视投影(上图右)会,并且更趋近于我们人眼的观察方式。

透视投影与正交投影
透视投影我们认为摄像机是一个点,放射出一个锥体,从这个点观察物体。
正交投影无论近还是远观察到的物体都是完全一样的。

Orthographic projection

正交投影

使长方体转变成一个规范的四方体。

一般来说是如下所示:
长方体转换成规范的四方体
注意:因为games101课程本身采用的是右手坐标系,这里提到的 [f,n] ,指的是人眼观察的方向,我们一般定义看向 -Z 方向。所以单纯从z轴上的数值而言,距离近的数值是大于距离远的数值的。
先平移再进行缩放变换。

变换步骤

下图中的

  • [-(r+l)/2] 等形式的方程意思是选取长方体中各个方向的中点,比如[r,l]方向代表的长方体左右中点,其他同理,并且该类方程取负号的原因是为了要进行平移,将长方体移到原点(x,y,z值要移动到原点就要相应移动-x,-y,-z值)。
  • [2/(r-l)] 的意思是先1/(r-l)操作,缩放到单位1,然后再2*1/(r-l)操作放大至2。2的意思是(-1,+1)区间,要把不规则的方块扩大为边长为2。
  • 这样的过程从长方体变成立方体,必然产生了拉伸,会变成标准立方体。这个过程称为(正则化、规范化、标准化)立方体。
    在这里插入图片描述

Perspective Projection

回顾齐次坐标
(x,y,z,1)和(kx,ky,kz,k!=0)指的是同一个点。同一个点在齐次坐标的表现形式下会不一样。

怎么做透视投影

平截头体到长方体的转变
首先挤压平截头体,也就是一个平面到另一个平面的投影,再做正交投影,变换成长方体。

所谓挤压,就是将远平面f按照比例,挤压成近平面n的那种大小,远平面f上的点的坐标就会发生变化:

  1. 近平面永远不变,意思是即使平截头体被挤压后,近平面上的任何一个点始终不会变化。
  2. 挤压之后,z值也不会发生变化。
  3. 中心点不变,比如中心点为(0,0),挤压之后依旧是(0,0)。
  4. 其他的点向中心进行偏移,比如近平面是x和y在[-1,1]这个区间上的正方形 ,而远平面f为[-2,2]的正方形,那么远平面挤压过后,也要变为[-1,1]的正方形,那么远平面的点与原来的位置相比,就更靠近中心了。

怎样做透视投影?

  1. 首先将平截头体挤压成长方体(需要求矩阵:从透视投影到正交投影的变换矩阵)
  2. 上面结束后,再做一遍正交投影(正交投影的变换矩阵)
    平截头体侧面分析图
    上图是挤压远平面的y的过程,根据相似三角形比可以得出图中右侧的公式。

坐标之间的关系:
齐次坐标表达
z的变换还不知道,就先设为unknow。
M(persp->ortho)代表着“挤压变换”,(x,y,z,1)代表原始状态下远平面上的点,(nx , ny , unkown , z)代表挤压后远平面的点。于是,根据转换的这个式子就能够先写出矩阵的一部分信息:将下面的矩阵与向量(x,y,z,1)点乘,就能得到向量(nx,ny,unknow,z),根据此方法可以推出矩阵最后一行
在这里插入图片描述
接下来就是要求矩阵第三行的值。第三行的值是有关于z的变换的关系,如果能找到z和 z’ 之间的关系,就能够写出第三行的数值,由观察可以得出:

  1. 所有近平面上的点都没有发生变换(因为所有的平面都要挤压的近平面的大小,近平面并不需要挤压,所以不发生变化)
  2. 所有远平面上的点的z的分量不会发生变化(因为挤压只挤压了平面的大小,并没有移动远平面的位置)

在这里插入图片描述

根据 近平面坐标点不变的特点 ,因为近平面的点不变,所以输入的点和输出的点应该是一样的。这里点相等的表示方法跟前面回顾的知识点:齐次坐标 有关。
齐次坐标回顾
所以可以推出下列关系。
近平面的点(x,y,n,1),与齐次坐标下的(nx,ny,n²,n)是同一个点。
近平面的坐标点
所以 向量(x,y,n,1) 与矩阵 M(persp->ortho) 相乘,最后要得出向量 (nx,ny,n²,n)
在这里插入图片描述
根据这个关系可以算出矩阵 M(persp->ortho) 未知的第三行的格式为(0,0,A,B)。前两个数应该为零,因为得数中不包括x和y,后两个数与n有关,所以设为未知数A,B
矩阵M(persp->ortho)的第三行关系式
最后得到近平面与A、B有关的关系式:
近平面与A、B有关的关系式

根据远平面上:

  • 所有远平面上的点的z的分量不会发生变化
  • 并且(0,0,f,1)指的是远平面上的中点,因为中点在前面就解释过了不会发生变化

可以得到下面的式子:

远平面与A、B有关的关系式

最后根据远近两个平面的关系式,可以得出A、B的表达式:
A、B表达式
到此为止,平截头体的”挤压”推理已经完成,M(persp->ortho)矩阵也是可知的了。
接下来需要完成的是做正交投影。

还需要完成的事
完成以上步骤才是正式完成透视投影。正交投影的变换在上面有解释。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值