2、计算机图形学——视图变换

视图变换的任务:将虚拟世界中以(x,y,z)为坐标的物体变换到 以一个个像素位置(x,y) 来表示的屏幕坐标系之中(2维),整体过程可以分为四步

  • 模型变换(modeling tranformation):这一步的目的是将虚拟世界中或者更具体点,游戏场景中的物体调整至他们应该在的位置
  • 摄像机变换(camera tranformation):在游戏中我们真正在乎的是摄像机(或者说眼睛)所看到的东西,也就是需要得到物体与摄像机的相对位置
  • 投影变换(projection tranformation):根据摄像机变换得到了所有可视范围内的物体对于摄像机的相对位置坐标(x,y,z)之后,便是根据是平行投影还是透视投影,将三维空间投影至标准二维平面([-1,1]^2)之上(tips:这里的z并没有丢掉,为了之后的遮挡关系检测)
  • 视口变换(viewport transformation):将处于标准平面映射到屏幕分辨率范围之内,即[-1,1]^2→[0,width]*[0,height], 其中width和height指屏幕分辨率大小
    在这里插入图片描述

模型变换

利用基础的变换矩阵将世界当中的物体调整至我们想要的地方(旋转,平移,缩放)

摄像机变换

摄像机变换的目的是得到所有可视物体与摄像机的相对位置,我们把物体和摄像机一起做移动,如果能够把摄像机的坐标轴(假设为u,v,w 分别对应原世界空间中的x,y,z)移动到标准的x,y,z轴,核心问题就变成了如何表示或者说如何将camera的坐标系与原世界坐标系重合

相机或眼睛位置 (eye postion) e,用向量 e 表示:显然,一个物体在空间中,肯定是需要一个坐标的
观察方向 (gaze postion) g,用向量 g 表示:有了位置后,摄像机不同的拍摄角度会生成不同的视图,所以还要定义一个观察方向
视点正上方向 (view-up vector ) t,用向量 t 表示:固定好位置与朝向之后,摄像机还是可以360°旋转的,不同的旋转角也会生成不同的视图,所以还需要定义一个向上的方向来描述摄像机的旋转
在这里插入图片描述
建立摄像机坐标系
在这里插入图片描述
其中u,v,w分别对应标准坐标系下的x,y,z
在这里插入图片描述
这里为什么不直接拿 t 当做基底向量是因为摄像机的头可能是歪着看的

  • 将相机位置移动至原点

在这里插入图片描述

  • 通过旋转矩阵将二者坐标系重合
    在这里插入图片描述

投影变换

投影变换时除了摄像机之外另外一个重点,在经过摄像机变换之后得到的依然时三维空间中的顶点坐标,如何将其映射至二维空间坐标就交给投影变换完成。正如我们所熟知的那样投影又主要分为正交投影和透视投影

正交投影变换

在这里插入图片描述
正交投影是相对简单的一种,坐标的相对位置都不会改变,所有光线都是平行传播,我们只需将物体(可视部分,即上图的那个长方体)全部转换到一个[-1,1]^3的空间之中即可(其中x,y坐标便是投影结果,保留z是为了之后的遮挡检测),这只是为了之后的计算更加的方便而已,在转换到屏幕坐标的时候就会重新拉伸回来,所有物体的相对大小位置都不会有任何变化

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

透视投影变换

在这里插入图片描述
透视投影就是最类似人眼所看东西的方式,遵循近大远小,如果说正交投影都是水平光线,那么透视投影则显然不是了(左透视,右正交)
在这里插入图片描述
此时,投影过程可用下图解释,将 (x,y,z)一点投影至投影屏幕之后,他的坐标变为( x ′ , y ′ , z ′ )
在这里插入图片描述
图中原点代表视点,z = -n代表投影平面,利用相似三角形性质不难得出图中投影之后的坐标

那么利用齐次坐标的性质,希望找到一个矩阵完成如下变换
在这里插入图片描述
如果形象化的描述一下的话,就是利用这个变换矩阵将整个空间压缩了一下,使其对应了真正透视投影的坐标,最后不要忘了要利用正交转换到[-1,1]^3的空间之内

首先,这个矩阵的前两行和最后一行是能很快确定出来的,根据最后的齐次坐标,如下:
在这里插入图片描述
那么如何确定第三行呢,这里就要运用透视投影的一个性质:

可视空间,即本节第一张图的Frustum的前后面变换之后z坐标不变
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得最后变换矩阵为
在这里插入图片描述
最后的一步,将这个被压缩过的空间,重新正交投影成标准小立方体
在这里插入图片描述
在这里插入图片描述

视口变换

两个范围空间的转换 [-1,1]^2[0,width]*[0,height]

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值