华科_图形学笔记_07_投影变换

本文探讨了计算机图形学中的投影变换,包括平行投影、透视投影的区别,观察空间的定义与规范化过程,以及如何通过几何变换和矩阵运算实现观察空间的标准化,以便后续的裁剪和屏幕映射操作。重点介绍了透视投影的缩放效应和视景体概念。
摘要由CSDN通过智能技术生成

计算机图形学_华中科技大学_中国大学MOOC(慕课)


7.1_有趣的投影

由于我们的观察设备是二维的,因此,最终都存在一个三维向二维的映射过程。这个映射过程,按照几何意义来说就是投影。

而在我们之前讲到的观察变换中,其实还有一个隐含着的概念,观察平面。

那么这个平面,也可以叫做投影平面,我们看到的景物,都需要投影到这个平面上。

一个是平行投影。工程上我们用到的三视图,学习几何的时候用到的轴测图,都属于平行投影。

与平行投影相对而言的是透视投影。

最初接触这个概念应该是接触绘画的时候,

老师会说要给出透视的效果。很显然,和平行投影相比,透视投影,有近大远小的感觉,也就有了紧身的感觉。比如这里的树。近处,显得高,远处显得矮。原来的平行线在远处似乎汇聚在了一点,我们通常把这个点叫做灭点。有时在XYZ方向都会产生灭点,比如这幅图。

大家看到在X方向,Y方向的方向都有灭点。我们把这种情况叫做三点透视。

那么怎么区分平行投影和透视投影?这就要看投影中心到投影平面的距离。

如果无穷远,则可以认为投影线是平行的,形成的投影,也就是平行投影。

而投影中心距离投影面的距离如果是有限的,那就是透视投影。

对于平行投影,根据投影方向与投影面的夹角又可以分成两类。正投影和斜投影。

当投影方向与投影面的夹角是90度的时候,得到的投影,就是正投影。否则,就是这里的斜投影。

平行投影变换具有较好的性质,能够精确地反映物体的实际尺寸,也就是不具有透视的缩小性。另外平行线经过平行投影变换以后,还是保持平行。

正投影_根据投影面与坐标轴的夹角可以分成两类。

三视图和正轴测图。

当投影面与某一个坐标轴垂直的时候,得到的投影,就是三视图。

这个时候投影方向与这个坐标轴的方向一致。否则,得到的投影,就是正轴测图。

通常说的三视图,包括主视图,侧视图和俯视图三种,投影面分别与X轴、Y轴和Z轴垂直。

这里就显示了一个三维形体以及他三视图的效果。

它的计算很简单,比如,如果投影面与X轴垂直。且在XP这个位置,投影后,X' 肯定都变成了XP;Y'还是等于原来的Y,Z'还是等于原来的Z

有了这个关系,我们就可以得到对应的变换矩阵了。

那么大家看,其实三视图的特点,是物体的这个投影平面,平行于某一个坐标平面。

所以投影的这个效果能够反映形体的实际的尺寸。工程制图中常常用三视图来测量形体间的距离、角度以及相互之间的位置关系。

但是,它的不足之处是,三视图上只有物体的一个面的投影。

每一副就是一个面的投影。所以三视图难以形象地表示出形体的三维心智,只有将主、辅、侧三个视图放在一起,才能综合出物体的空间形状。下面的这幅图的情况,则发生了变化了,大家看这时的投影平面并不和任意一个坐标轴垂直,而是和任意一个轴,都存在着一个非90度的夹角。

这里的红色轴是投影方向,也就是投影平面的法向量。

我们是不是又会产生联想了?如果我们把这个向量旋转到X轴上,那么投影平面就与YOZ平行了

这时的投影计算就跟刚才的三视图计算一样。其实正轴测图,还有等轴测,正二侧和正三侧3种。

当投影面与三个坐标轴之间的夹角都相等的时候,是等轴测。

同一面与两个坐标轴之间的夹角相等就是正二测。

但是如果与三个坐标轴之间的夹角都不同,就是正三侧。不管是哪一种,我们都可以相应计算出它对应的变换矩阵。

有了正平行投影的基础.我们再来看看斜平行投影。

斜投影图,也就是斜轴侧图。是将这个三维形体像一个单一的投影面做平行投影。但投影方向不垂直于投影面所得到的平面图形。

通常,选择投影面垂直于某一个主轴,于是对平行于投影面的形体表面就可以进行距离和角度的测量。

而对于形体的其他面可以沿着这根主轴测量距离。

这样一来,斜轴测图,就将三视图和正轴测图的特性结合起来了。既能像三视图那样在主屏面上进行距离和角度的测量,又能像正轴侧图那样同时反映三维形体的多个面,具有立体效果。

常用的斜轴测图有斜等侧图和斜二侧图。

斜等侧图的投影方向与投影平面的夹角是45度角。

而斜二侧的投影方向与投影平面的夹角是arctg(2)。

这样,在斜等测里面的和投影面垂直的任何直线段。投影以后,它的投影长度不变,比如左图中的op等于OP'。斜二侧里面,和投影面垂直的任何直线段,投影长度就是原来的一半。也就是op等于两倍的OP1'了。

斜投影:常见的有斜等侧和斜二测

 

一个普遍的情况

对于斜等侧和斜二测,我们知道它Alpha的值了,贝塔通常可以取三视或者45度

这几幅图给出了一个单位立方体在XOY平面上几种常见的斜投影

再来看看更加复杂的透视投影

其实大家注意到,在三维几何变换矩阵T3D中,我们给出了四个子矩阵。可是其中的T3投影子矩阵一直都没有涉及。

即使刚才的平行投影也并没有改变T3中的任何一个值。

现在假定投影中心在原点,投影面与Z轴垂直

我们会发现这里存在着一个相似三角形对应边成比例的关系。

我们就看到这时候T3这个子矩阵中第三个元素就变成了D分之一。

由这个矩阵可以看出透视投影的特性了,就是透视缩小效应。

也就是说,三维形体透视投影的大小与形体到投影中心的距离成反比。

这种效应所产生的视觉效果十分类似于照相系统和人的视觉系统。

等长的两条直线段都平行于同一面。

但离投影中心近的,透视投影就比较长。而离投影中心远的线段,透视投影的效果,就是比较短。与平行投影相比,透视投影的深度感更强,看上去,更加真实。但透视投影不能真实地反映物体的精确尺寸和形状。

对于透视投影,一束平行于投影面的平行线的投影。也是可以保持平行的。但是不平行于投影面的平行线,这个投影就会汇聚到一个点。刚才我们已经提到过,这个点叫灭点。灭点可以看作是无限远处的一点在投影面上的投影。

透视投影的灭点,其实是有无限多个的不同方向的平行线在投影面上,就都能形成不同的灭点。

而坐标轴方向的平行线在同一面上形成的灭点,又称做主灭点。因为有XY和Z3个坐标轴,所以,主灭点最多就是三个。

当某个坐标轴与投影面平行的时候。这个坐标轴方向的平行线在同一面上的同影,仍然保持平行,不会形成灭点。

透视投影案主灭点的个数来分类。可以分为一点透视、两点透视和三点透视。

比如这里的a就是一点透视。

而B是两点透视。它有两个主灭点。

而C是三点头是,它有三个主灭点,看到这里的投影面,与三个坐标轴都相交了。

所以三个轴方向的平行线都会形成灭点,也就是主灭点。那么在现实的使用中,三点透视,我们用的是不多的,主要原因在于它难以构造。


7.2_规范化的投影变换

提纲

在几何阶段的最后,我们需要进行屏幕映射

可是在屏幕映射之前,还有一些工作没有做完。之前我们通过模型变换和视图变换之后,已经把世界坐标系转换到观察坐标系了。

那么我们分析一下。观察者最终看到什么结果,

一个当然就是观察坐标系的位置。这部分内容,我们在观察者也能动中给大家讲了。而另一个,就是观察方式。比如平行投影和透视投影看到的结果就不同。

那么这里其实有一个观察空间的概念。

要定义观察空间,首先需要定义观察窗口。

其实在观察的时候,隐含着一个观察平面。

因为感觉最后所有的内容都会投射到这个平面,因此这个平面有时也叫做投影平面。

观察窗口,正是观察平面上的一个有限区域。

观察窗口的边,一般平行于X轴和Y轴。而这里的这两个点分别就是窗口左下角和右上角。

观察窗口可以位于观察平面的任何位置。

定义了观察窗口之后,我们就可以利用观察窗口的边界来定义观察空间。

我们可以将这个观察窗口沿着几轴方向作平移运动。

这时候产生的三维形体,就是观察空间。因此,观察空间的大小是依赖于窗口的大小的。

当然,投影方式不同,观察空间也不同。

比如这里平行投影观察空间,就是一个四边平行于投影方向,两端没有底面,横截面为长方形的管道。

对于透视投影,观察空间,是顶点在投影中心,而棱边穿过观察窗口,四个角点没有底面的棱锥。

这样定义的观察空间是无限的。但是大多数场合观察空间是有限的。

因为我们不是千里眼,很远的地方我们看不见,同时我们眼睛也没长在脑后。鼻尖之前的景物才可能看见。因此,我们需要定义观察空间的前截面和后截面。前截面和后截面,都平行于观察平面,用Z等于Zfronth和Z等于Zback来定义。对于正投影,有限的观察空间就是一个矩形的平行管道。

对于斜投影,有限的观察空间就是一个斜平行管道。

而对于透视投影,观察空间,就被截成了棱台。

有限的观察空间,又叫做裁剪空间,也叫视景体,因为三维形体是相对于这个空间进行裁剪的。很显然,观察空间不同,裁剪和屏幕映射的结果就不同了。

可是这样一来,之后的裁剪和屏幕映射就比较复杂了,需要针对不同的情况分别处理。

顶一个规范化的空间,在遇到不同的观察空间的时候,只需要把它们规范化

基于这样的考虑,这里我们定义了一个规范化的观察空间。

一个中心在原点的立方体

那么接下来要考虑怎么规范化了。首先看最简单的证平行投影。为了分析简单,我们去掉干扰信息,就会发现除了位置的改变之外,其实就是把一个长方体变成一个正方体

进行比例变换,再加上平移变换。这个空间就可以变换到规范化的观察空间中去了。

再看看斜平行投影,显然,刚才的平移和比例还是需要的,可是不够。

为了简化这个问题,我们做了这样的一个投影。这样Xoy平面就变到一个轴上了,这时我们需要把这个平行四边形变成一个正方形。显然,这中间如果我们能够把它变成上面这样的长方形,再往右边的正方形变

把一个长方形变成了平行四边形,其实反过头来也可以把平行四边形变成长方形。因此,我们就可以通过错切变换把它变成上面这个样子,之后再进行平移和比例,就可以完成规范化了。

当然,最复杂的还是透视投影观察空间的规范化。很显然,刚才的平移比例错缺都少不了,可是还不够。

比如。看上面这个长方体,在一点透视之后,看起来是不是就是这样的。前面的这条边长,后面的这条边短。体现了近大远小。那么,我们是不是可以通过一个一点透视,让近处的红色的前截面变大,而远处的后截面变小,显然是可以的,因此,这里需要一个透视投影变换。

通过分析,我们知道不管是以上哪种观察空间的规范化都是通过几何变换来处理的,所以也都可以用矩阵运算来解决,这里再次证明了几何阶段矩阵运算的重要性。

值得庆幸的是,在opengl中并不需要我们自己来计算这个变换矩阵,而是通过一个函数的调用就可以进行计算了。

以3D场景中最常见的观察方式透视投影为例。我们只需要通过这个perspective函数,就可以得到对应的变换矩阵。

总之,有了这样的规范化之后,我们就把观察到的内容,放在一个规范化的观察空间了,也就是裁剪空间了。

这之后的裁剪和屏幕映射也会变得比较简单。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值