一、三维观察流水线
概念:将建立的三维场景显示在二维视口的过程称为三维观察流水线。
在三维观察流水线中,也就是在将三维场景显示在二维视口的过程中,需要在不同坐标系下进行不同的操作,这些坐标系包括:

建模坐标系需要建立几何模型,通常将坐标系原点与几何模型的特殊点相对应,如球体的球心等,然后将在建模坐标系中建立的多个模型变换位置统一显示到世界坐标系中(该过程称为模型变换)。
观察坐标系是确定的是观察者的位置和方向,可以观察场景的不同视角:

场景从世界坐标系到观察坐标系的变换称为视图变换。
裁剪坐标系确定了视见体,三维裁剪窗体称为视见体,确定观察坐标系的可见范围。由观察坐标系到裁剪坐标系的变换称为投影变换。投影变换还包括三维图像到二维图像的变换,可以采用不同的投影模式,包括正交投影和透视投影两种。采用正交投影时,视见体通常被定义为平行六面体,采用透视投影时,视见体被定义为棱台,透视投影的观察结果与人眼观察结果更相符。视见体的大小由用户完成,用户可以根据投影模式的不同将视见体定义为任意大小的长方体或棱台:

用户定义的视见体的随机性不利于计算机进行统一的处理,更不利于设备无关性的实现,因此,图形学中通常将用户定义的视见体进行规范化,即将视见体统一规范化为[-1,1]的立方体,这种规范化的变换过程称为裁剪与规范化变换,实现的是裁剪坐标系到规范化设备坐标系之间的变换。场景被规范化到立方体内的视见体后,就可以通过视口变换在显示屏幕中某个窗体的视口区域显示出来。需要注意的是,若视见体的纵横比与视口的纵横比不同,也会影响到场景的最终显示比例:

坐标变化与坐标系之间的关系:

二、视图变换(又称观察变换、视点变换、照相机变换)
视图变换实现的是世界坐标系到观察坐标系的变换。
世界坐标系通常是由x,y,z确定的笛卡尔坐标系,观察坐标系可有用户自己定义,例如将观察坐标系定义为用uvn表示的笛卡尔直角坐标系


两个三维坐标系间的复合变换过程难以避免使用旋转变换,为方便界定旋转角度,可以考虑将世界坐标系表示为球面坐标系,笛卡尔之间坐标系一点(x,y,z)与球面坐标系的点的关系:

世界坐标系与观察坐标系的位置关系为:

世界坐标系定义为os(x,y,z),观察坐标系定义为os(xs,ys,zs),观察坐标系的原点(视点Os)在世界坐标系下的坐标为(a,b,c),观察坐标系z轴为视点Os指向世界坐标系原点O的方向(即Zs在OsO直线上),给定世界坐标系向上的Ys方向,通过左手定理可确定Xs方向。
接下来考虑如何实现世界坐标系到视觉坐标系的变换(视图变换):
通过基础几何变换实现世界坐标系到视觉坐标系的重合。
(1)将世界坐标系的原点O移动到视觉坐标系的原点Os,得到临时坐标系x1y1z1,变换矩阵为:

(2)将x1y1z1的z1坐标轴与视觉坐标系的Zs坐标轴重合。这一步需经过两步旋转变换。
做O1到平面xoy的投影P。
第一步旋转:实现x1与O1OP平面的重合
第二部旋转:分两步进行,首先绕Z1顺时针旋转以下角度,使得y1轴旋转到O1OP平面内
得到临时坐标系x2y2z2,此时的y2z2均位于O2OP平面内,x2垂直于O2OP平面

旋转矩阵为:

第二部旋转将坐标轴z2绕坐标轴x2逆时针旋转以下角度,使得坐标轴z2轴与视觉坐标系的z坐标轴(即O1O重合),得到临时坐标系x3y3z3:

变换矩阵为:

(3)将x3y3z3的x轴做反射变换,即将x值取反,变换矩阵M4为:

将变换中的四个变换矩阵自右向左相乘:

此时就可以实现世界坐标系下的坐标到视觉坐标系下的坐标的变换。

三、投影变换
投影变换是把三维物体投影到投影面上得到二维平面图形的变换。其中投影面为平面的投影称为平面几何投影变换,接下来讨论的就是平面几何投影变换。

平面几何投影又分为平行投影和透视投影,平行投影的投影中心距离投影面无穷远,投影线是平行的,而透视投影的投影中心与投影面间有有限的距离,投影线间不平行:

平行投影的物体大小不变,多用于工程制图,透视投影的物体相关比例会发生变化,形成一种近大远小的效果(例如平行的两条火车轨道在远处相较于一点),更符合人眼自身的观察结果。
平行投影又分为正平行投影(投影线与投影面垂直,又称正交投影)和斜平行投影(投影线与投影面不垂直),还可再细分。

1.正交投影
正交投影的视见体通常为平行六面体,将平行六面体的前平面作为投影平面,正交投影将平行六面体内可见的三维形体投影到平行六面体的前平面,完成将三维形体投影到二维平面的过程。

正交投影中,当投影面与某一坐标轴垂直时,得到的投影是三视图:

当投影面与三个坐标轴都不垂直时,得到的投影为正轴测图:

常见的正交投影是三视图,生成的投影图为主视图(投影到xoz平面)、俯视图(投影到xoy平面)、侧视图(投影到yoz平面)。

三视图的投影变换矩阵:
主视图变换矩阵(将y坐标变为0):

得到的三个投影面不在同一平面内,可将其移到同一平面内。
例如,将xoy平面内生成的俯视图绕x轴旋转90度变换到xoz平面进行显示,为了拉开一定距离,再将其沿z轴负方向平移一段位移,这个复合变换的变换矩阵为:

仍以同样的方法得到xoz平面的侧视图:将yoz面得到的侧视图绕z轴正转90度到xoz平面,再将其沿负x方向平移一段距离。
投影矩阵为:

2.正轴测投影

3.透视投影
通常定义的视见体是棱台:

透视投影的投影线从与投影面相距有限远的空间一点投射,该点称为视点或投影中心。将眼睛所在的位置称为视点,视线称为投影线,垂直于屏幕的视线与屏幕的交点称为视心,视点到视心的距离称为视距。通常可以设定视点是视觉坐标系的坐标原点,视心是屏幕坐标系的坐标原点。透视投影有近大远小的特点,当投影小到极点会消失,这个极点被称为灭点。
以视觉坐标系的点变换到屏幕坐标系来讨论投射投影:

假设视觉坐标系XvYvZv一点为(xv,yx,zv),投影到屏幕坐标系中投影平面设定为z=d,投影平面垂直于视觉坐标系的z轴,视觉坐标系投影到屏幕坐标系的投影平面中的点为(xs,ys,zs),(xs,ys,zs)可以通过相似三角形来求解。


点的透视矩阵为:

注意,在透视投影过程中平行线之间的关系是否发生变化,规律是:



上述规律对于视点在x轴、y轴同样适用。
透视投影改变平行线间的平行关系:

计算机图形学(三维观察投影线、视图变换、投影变换)相关推荐

  1. 计算机图形学 第六章 图形变换

    计算机图形学 第六章 图形变换 这章一般只考一道题(10分左右) 数学基础 (都是线性代数的知识,这里略写) 齐次坐标: 将一个原本是 nnn 维的向量用一个 n+1n+1n+1 维向量来表示 如 ( ...

  2. 计算机图形学 实验3 《图形变换》

    计算机图形学 实验3 <图形变换> 一.实验目的 学习图形的基本几何变换. 二.实验内容 1.投影变换: 2.视口变换: 3.旋转.平移和缩放. 三.实验方法 本次实验将投影变换.视口变换 ...

  3. 计算机图形学规则形体,计算机图形学 三维形体的表示ppt课件.ppt

    <计算机图形学 三维形体的表示ppt课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<计算机图形学 三维形体的表示ppt课件.ppt>文档请在 ...

  4. 计算机图形学三维变换论文,计算机图形学 第5章 三维图形生成和变换技术

    计算机图形学 第5章 三维图形生成和变换技术 (63页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第五章 目录第五章 三维图形生成和变 ...

  5. 图形学-(视图变换,投影变换)

    1.视图变换 在 3 维物体变到二维平面的过程中,我们需要规定好相机的位置.对于相机所做的变换就是视图变换 (Viewing/Camera transformation). 我们需要对相机位置进行定义 ...

  6. 计算机图形学-3D观察与图像渲染流水线-投影全解析

    本文目标: 理清OpenGL在3D观察的整个流程. 清楚各个专业术语的含义. 对坐标系变换的数学有所掌握. 1 三维观察与观察流程 1.1 三维观察与照相观察的对比 三维观察过程与使用照相机拍摄照片类 ...

  7. 计算机图形学三维投影程序,三维计算机图形学

    <三维计算机图形学>是科学出版社出版.本书共分17章,内容包括IDE环境与编程基础.基本语法与数据类型.运算操作.流程控制.面向对象程序设计.用户界面编程.文件系统管理.图形图像多媒体编程 ...

  8. 计算机图形学三维建模及灯光作业(派大星)

    计算机图形学设计人物派大星,以下是参考代码. 需要函数库的私信我. 运行环境:VC 6.0 引擎库:OpenGL 完整代码: #include <GL/glut.h> #include & ...

  9. 图解计算机图形学三维变换算法

    工程下载 http://pan.baidu.com/s/1o7OEMc6 tcddd.rar 此处为在Windows下运行的TC图形程序:使用了EasyX库: EasyX库可参考: http://bl ...

最新文章

  1. chart.Correlation绘制相关性热图
  2. iOS之深入了解控制器View的加载
  3. 聚类时需要标准化吗_打球时意外受伤,同伴需要担责吗?
  4. 面试官:为什么HTTPS是安全的?
  5. vue-cli3打包注意路径的问题
  6. 阿里云 Ubuntu16.04 部署 LAMP
  7. 使用Filter跟踪Asp.net MVC页面加载(转)
  8. 解决:Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:2.3.2问题
  9. 报错:未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件...
  10. 深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建
  11. wireshark ip地址抓包
  12. js获取当前服务器信息,js获取当前URL、参数、端口、IP等服务器信息
  13. 【产品功能】配置网卡从此与关机无缘,弹性网卡支持热插拔功能
  14. puppet的使用:ERB模板
  15. github免用户名密码管理代码
  16. npm修改全局安装默认路径(C:\Users\Administrator\AppData\Roaming\npm\node_modules)
  17. linux fastQC 操作命令,10 月 17 日 Linux Fastqc 软件安装
  18. ftp下载命令行工具wget
  19. 利用七牛云如何上传图片制作外链?
  20. 985助理教授与二本教授哪个水平高?

热门文章

  1. c++实现basename
  2. games101——作业1
  3. 机器学习-最大熵模型
  4. 编程语言中,到底什么是变量,变量的作用是什么?
  5. 基于Hexo的matery主题搭建博客并深度优化
  6. c语言阶码的位数,【判断题】浮点数的取值范围由阶码的位数决定,而精度由尾数的位数决定。 (1.0分)...
  7. 我的世界java版种子掠夺者,《我的世界》1.14最适合新手的全能种子 你想要的冒险这里都有...
  8. Graylog Pipeline配置
  9. K3金碟新建账套及基础数据导入导出教程
  10. 如何打开荣耀5A的调试模式