计算机图形学_华中科技大学_中国大学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函数,就可以得到对应的变换矩阵。

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

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

华科_图形学笔记_07_投影变换相关推荐

  1. 华科_图形学笔记_05_初探造型技术_02

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 5.3.1_规则形体_01_边界表示 对于规则形体,我们有三类表示方法. 一个是边界表示,也就是用一组曲面或者是平面来描述物体的,这些面,将物体就 ...

  2. 华科_图形学笔记_0402_图形思维的起点_朴素的软光栅(二)_03

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 4.5_巧妙的区域填充 提纲 区域的定义: 指已经表示成点阵形式的填充图形,它是像素集合 一个点P的4-邻接点指的是它上下左右四个相邻的接点 一个 ...

  3. 华科_图形学笔记_09_奇妙的真实感_片元着色01_02

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 9.3_光照明模型_上_Phong模型初步 首先,我们来看看光照模型发展的历史. 在1967年,Wylie等人,第一次在显示物体时加进了光照的效果 ...

  4. 华科_图形学笔记_09_奇妙的真实感_片元着色02

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 9.4_让人头疼的纹理_上_颜色纹理 在之前的光照模型中,我们看到在给物体加上了光照之后,物体获得了一定的真实感. 可是大家也会发现一个现象,那就 ...

  5. 华科_图形学笔记_0201_认识图形系统

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 提纲 计算机一个十分重要的功能"交互" 对于这个球,用户可以很方便的对其进行修改,这一侧增加一个凸起,另一侧也增加一个,总之最 ...

  6. 华科_图形学笔记_05_初探造型技术_01

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 5.1_初识造型技术 提纲 现实生活中有很多不同类型的物体,比如树.华.烟云.飞机.沙发等等,那么在计算机内对这些对象图形化也就会遇到不同的问题. ...

  7. java bresenham画直线_图形学笔记: Bresenham画线算法

    图形学课本, 按规矩介绍完矩阵行列式, 第一个算法肯定就是Bresenham画线算法了. 來我们來看看算法 Bresenham是用来画一些不反走样的线段的. 都说了线段肯定有起点和终点, 假设我们: ...

  8. 计算机图形学中向量点乘和叉乘的用途_图形学笔记(一):基础知识

    从这便文章开始整理学习到的计算机图像学相关知识,原则是只写我没在网上找到清楚解释的内容,如果有很好的文章介绍相关内容,我会直接把链接贴上. 首先弄清 Computer Graphics和 Comput ...

  9. 计算机图形学笔记(观测变换、模型变换、视图变换、投影变换、视口变换)

    计算机图形学笔记(观测变换.模型变换.视图变换.投影变换.视口变换) 目录 计算机图形学笔记(观测变换.模型变换.视图变换.投影变换.视口变换) 一.简介 1.模型变换(Model transform ...

最新文章

  1. oracle自动备份
  2. ['1', '2', '3'].map(parseInt) what why ?
  3. 输出联系变化的数字seq
  4. 小米暑期实习在线笔试2015-04-25
  5. 敬业签电脑手机云同步便签及安卓手机和苹果手机云同步桌面便签
  6. python连接数据库--查询数据
  7. 4.这就是搜索引擎:核心技术详解 --- 索引压缩
  8. 微软应用商店Ubuntu 20.04 LTS打开0x8007019e错误解决
  9. 如何快速区分单模与多模光纤收发器?
  10. 【数据压缩】压缩率-图像熵-保真度
  11. python英语词汇读音_40行Python代码区分英语单词和汉语拼音
  12. hive 转拼音udf_自定义UDF函数:将汉字转换成拼音
  13. python十六进制转换成二进制_python - 将十六进制转换为二进制
  14. 免费易混实词辨析456组(1)
  15. 在职研究生(多重继承)Python
  16. validity属性返回对象中的属性值
  17. 如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名
  18. 手机短信验证码发送(106短信验证码发送)
  19. 【面试篇】前端点滴(css/css3)
  20. 怎么学习电脑板编程c语言,电脑编程c语言学习

热门文章

  1. Recap|Hadoop User Group France
  2. 《当咖啡与甘蓝汁竞争》:产品是负熵,帮助客户更好进化
  3. VSFTP一键部署脚本
  4. layui lay-verify 验证
  5. AviSynth 模拟Mplayer的遮标滤镜(Delogo)
  6. 宏观经济学 - 国民收入的决定:收入-支出模型
  7. 手机热点通过蓝牙共享给电脑
  8. amCharts 5.2.2 Crack
  9. 微x怎么设置主题_团日活动主题策划书范文
  10. 如何免ROOT,实现安卓设备远程控制?