opyright © 1999-2020, CSDN.NET, All Rights Reserved
CTO写低级Bug
登录
剑 来!
关注
计算机图形学二:视图变换(坐标系转化,正交投影,透视投影,视口变换) 原创
2020-04-04 18:00:38
45点赞
剑 来!
码龄4年
关注
视图变换(Viewing Transformation)
1 模型变换(modeling transformation)
2 摄像机变换(camera tranformation)
3 投影变换(projection tranformation)
3.1 正交投影变换(Orthographic Projection Transformation)
3.2 透视投影变换(Perspective Projection Transformation)
4 视口变换(viewport transformation)
Reference
(本篇文章同步发表于
知乎专栏:
https://zhuanlan.zhihu.com/p/144329075 欢迎三连关注)
我们可以这样来描述视图变换的任务:将虚拟世界中以(x,y,z)为坐标的物体变换到 以一个个像素位置(x,y) 来表示的屏幕坐标系之中(2维),这确实是一个较为复杂的过程,但是整个过程可以被细分为如下几个步骤:
(1) 模型变换(modeling tranformation):这一步的目的是将虚拟世界中或者更具体点,游戏场景中的物体调整至他们应该在的位置
(2) 摄像机变换(camera tranformation):在游戏中我们真正在乎的是摄像机(或者说眼睛)所看到的东西,也就是需要得到物体与摄像机的相对位置
(3) 投影变换(projection tranformation):根据摄像机变换得到了所有可视范围内的物体对于摄像机的相对位置坐标(x,y,z)之后,便是根据是平行投影还是透视投影,将
三维空间投影至标准二维平面([-1,1]^2)之上 (tips:这里的z并没有丢掉,为了之后的遮挡关系检测)
(4) 视口变换(viewport transformation):将处于标准平面映射到
屏幕分辨率范围之内,即[-1,1]^2 → \rightarrow →[0,width]*[0,height], 其中width和height指屏幕分辨率大小
有了如上4个步骤之后,整个视图变换的过程就变的清晰了起来,如下给出一个具体例子帮助理解:
上图的4个箭头分别对应了上文所讲述的4个具体步骤,接下来我们就具体讲解这4个步骤到底做了什么。
1 模型变换(modeling transformation)
关于模型变换其实在开头部分便已经讲清楚了,就是利用基础的变换矩阵将世界当中的物体调整至我们想要的地方(旋转,平移,缩放)。
2 摄像机变换(camera tranformation)
Camera transformation属于比较复杂的一部分,但其实一但掌握了套路,也十分容易理解,希望我的解释能够帮助到你。
正如上文所说摄像机变换的目的是得到所有可视物体与摄像机的相对位置,怎么得到?非常直观的一步,我们把物体和摄像机一起做移动,如果能够把摄像机的
坐标轴(假设为u,v,w 分别对应原世界空间中的x,y,z)移动到标准的x,y,z轴,那么此时物体的坐标不自然便是相对坐标了吗!
因此核心问题就变成了如何表示或者说如何将camera的坐标系与原
世界坐标系重合呢?我们先定义3个东西
相机或眼睛位置 (eye postion) e
观察方向 (gaze postion) g
视点正上方向 (view-up vector ) t
有了这三者定义之后,我们便可以建立摄像机坐标系了,定义如下:
其中u,v,w分别对应标准坐标系下的x,y
本回答被网友采纳