GAMES101-现代计算机图形学入门-闫令琪 - lecture4 观测变换(viewing transformation) - 课后笔记

观测变换(Viewing transformation)

  • 视图 / 相机变换(View / Camera transformation)
  • 投影变换(Projection transformation)
    • 正交投影(Orthographic projection)
    • 透视投影(Perspective projection)

视图/相机变换(View / Camera transformation)

什么是视图变换?

思考下如何去拍摄一张照片:

  • 找到一个好地方,并且调整人的姿势,(只对模型进行了变换(model transform))
  • 调整一个合适的角度,放置摄像机(view transformation)
  • 茄子!(将3d转化为2d,投影变换(projection transformation))

图形就是按照上面的步骤进行变换,最终获得屏幕上的2D图像,这之中进行了三次变换,分别是模型变换(model transformation)、视图变换(view transformation)、投影变换(projection transformation),简称MVP ,这节中主要说视图变换。

视图变换操作的主要对象是相机,然后其他的物体跟着变换。

如何实现一个视图变换?

视图变换是对摄像机进行操作,所以需要先定义一个Camera,定义一个Camera需要:

  • Camera的位置 e (Position)
  • Camera的观察方向 g (Look-at / gaze direction),
  • Camera的上方向 t(Up direction),上方向用于固定摄像机的角度,如t指向正上方,那么摄像机就是正的,若t指向斜上方,那么Camera拍出来的图片就是斜的
  • Camera的右方向 g × t

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

如果把Camera看作空间中的一个物体,若将Camera和其他的物体同时进行移动(进行同一种的位移变换),那么其他的物体和Camera就会是一种相对静止则Camera中显示的画面就永远不会发生改变,所以要希望能够通过Camera观察不同的物体以及转换视角,必须要让Camera和空间中的其他物体实现相对运动。

只移动物体或者只移动Camera,最后可能都会得到同一个结果。那么既然这样的话,不如永远把Camera固定到原点的位置,并且Up方向指向y轴方向,Look-at方向指向-z轴的方向。这样就认为其他所有的物体在移动,而相机并不移动,为什么这么做?老师说这是大家约定俗成的一个东西。其实因为相机放在(0,0,0)的位置有很多的好处,相机沿着-z看也会有很多的好处。所以这个约定的相机位置就是一个标准位置

那么怎么操作才能把相机放到原点的位置,并且Up指向y方向,Look-at指向z方向?

相机到达这个标准位置,需要经过平移和变换,那么就用一个变换矩阵来完成相机到原点的过程。该矩阵为:

在这里插入图片描述

那么这个M(view)矩阵在数学上怎么实现?将下面多个变化叠加,最终可以得到M(view)矩阵.

  • 先将Camera的position变换到原点(origin)
  • 将g旋转到-z轴方向
  • 将t旋转到y轴方向
  • 将g×t旋转到x轴方向

在这里插入图片描述

M(view)矩阵的具体实现:

将M(view)矩阵分解为R(view)和T(view)两种变换矩阵,其中T(view)为位移矩阵,将Camera的position移动到原点,R(view)为旋转矩阵,将Camera的几个方向轴旋转到坐标系的位置。

在这里插入图片描述

T(view)矩阵,将Camera的position移动到原点,即将(xe,ye,ze)移动到(0,0,0),则x,y,z上的位移量分别为-xe,-ye,-ze。

在这里插入图片描述

R(view)矩阵要做的事就是将g旋转到-z轴,t旋转到Y轴,(g × t)旋转到x轴。如果这样直接旋转太麻烦,-z轴的方向向量为(0,0,-1),y轴的方向向量为(0,1,0),x轴的方向向量为(1,0,0),明显可以看出,从-z旋转到g,从y旋转到t,从x轴旋转到(g×t)更为简单,这个旋转矩阵为:
在这里插入图片描述

再求这个矩阵的逆矩阵,即逆变换,就可以得到Camera的三个方向旋转到坐标系的三个轴的变换矩阵。因为旋转矩阵都是正交矩阵,所以其逆矩阵 = 转置矩阵。

在这里插入图片描述

得到了以上的两个变换矩阵后,就可以将Camera的位置设置在原点,并以-z轴为look-at方向,以y轴为up方向。就可以认为Camera是始终不动,变换的一直是Camera以外的其他的物体

相机/视图变换总结

投影变换(Projection transformation)

在图形学中,投影就是将3D的图形投影到2D的平面上,即将三维物体转换成能在能在屏幕上显示的二维图像。

投影变换分为正交投影和透视投影

在这里插入图片描述

左图为正交投影,右图为透视投影。透视投影进大远小,更符合人眼的观察效果;正交投影不具有进大远小的性质,正交投影是假设Camera位于无限远的位置,投影出来的物体不论近处还是远处,大小都是一样大,更适用于工程制图。具体情况如下所示:
在这里插入图片描述

左图为透视投影,透视投影的近平面和远平面的大小不同,会将平截头体内部的物体投影到近平面上(绿球在外面,所以没有投影进来),并且离近平面(near clip plane)近的物体较大,远的物体的投影较小。右图为正交投影,而正交投影则是将正方体内物体投影到近平面上,假设Camera在无限远处,那么所有的投影都是以平行光的方式进行投影到近平面上,所以不具有近大远小的效果。(只有在近平面(near clip plane)和远平面(far clip plane)内的物体才能被投影到近平面上)。

正交(射)投影(Orthographic Projection)

正交投影是把Camera固定在原点上,look-at方向为-z轴,up方向为y轴,如果要对物体进行正交投影,只需要将三维坐标中的z坐标直接丢弃,就能够得到投影的结果,如图所示,投影平面为z = 0,直接丢弃z坐标或者直接令z坐标为0,就可以得到投影的效果。

在这里插入图片描述

正交投影最后会被缩放到一个[-1,1]的区间范围内,即所有的点的坐标的分量都是在[-1,1]之间的,如果在范围之外则会缩放到[-1,1]之间,这是一个约定俗成的规定。

但是正交投影无法区分前后关系,如上图所示,得到的投影面如下:
在这里插入图片描述

你并不能判断E在前面还是方块在前面。

那么,如果我有一个立方体,我应该如把它转换到[-1,1]之间?

在坐标系统,使用六个数即可定义个立方体(如x=1代表一个面,x=-1代表一个面,六个数定义6个面,包围起来的立体就是立方体),用 l(left) , r(righit) , b(bottom) , t(top) , f(far) , n(near)六个数定义一个立方体.

在这里插入图片描述

最右边的立方体经过位移,缩放,最终投影的立方体在[-1,1]之间。而转换的矩阵是:

在这里插入图片描述
右边的矩阵先与点(表示点的坐标的向量)结合,将物体位移到原点,然后左边的矩阵对其进行缩放。

透视投影(Perspective Projection)

  • 在图形学、艺术以及视觉上最常用的投影。(正交投影并不行,更适用于工程制图)
  • 远处的物体更小,近处的物体更大
  • 平行线不再平行,最后会汇聚到一个单一的点上

在这里插入图片描述

如图所示,平行的铁轨在透视投影的情况下,最终铁规会汇聚到一个点上。

在学习透视投影之前,要先了解一些知识:齐次坐标的属性!

  • (x,y,z,1),(kx,ky,kz,k!=0),(xz,yz,z^2,z!=0),全都代表了同一个(x,y,z)点。齐次坐标(x,y,z,w)所代表的点为(x/w , y/w , z/w)。
  • 比如:(1,0,0,1)和(2,0,0,2) 都代表着(1,0,0)这个点。

那么如何进行透视投影?

下面有两个透视体
在这里插入图片描述

左边为透视投影的透视范围,是一个平截头体,中间的每一条线最后都会汇聚到Camera所在的位置;右边为正交(射)投影的透视范围,因为默认Camera在一个无限远的地方,所以中间的每一条线都是平行的。

要进行透视投影的话,需要完成两步
  • “挤压”这个平截头体,让其成为一个长方体或者立方体,如正交(射)投影那样
  • 然后对这个长方体进行正射投影,就可以得到透视投影的最终效果。
“挤压”的这种变换的实现:

所谓挤压,就是将远平面f按照比例,挤压成近平面n的那种大小,远平面f上的点的坐标就会发生变化:1.中心点不变,比如中心点为(0,0),挤压之后依旧是(0,0),2.其他的点向中心进行偏移,比如近平面是x和y在[-1,1]这个区间上的正方形 ,而远平面f为[-2,2]的正方形,那么远平面挤压过后,也要变为[-1,1]的正方形,那么远平面的点与原来的位置相比,就更靠近中心了。

在这里插入图片描述

如上图所示,要用矩阵来完成这种变换就要找到这个矩阵,找到这个矩阵就意味着找到(x’ , y’ , z’)和(x , y , z)之间的关系,其中(x’ , y’ , z’)在近平面上,(x , y , z)在远平面上。由相似三角形可以得出他们之间的关系:

在这里插入图片描述

在齐次坐标下就可以表示为:

在这里插入图片描述

中间第二个向量表示的是(x’ ,y’ , z’),因为没有找到z和 z’ 之间的关系,所以目前用unkown来表示,然后四个维度都×z,能够得到一种比较简单的表示方法,但是代表的点仍然是原来那个点,z’仍然是unkown,但是发生了变化。

这种将透视投影“挤压”成正交投影的变换,用矩阵表示如下:

在这里插入图片描述

M(persp->ortho)代表着“挤压变换”,(x,y,z,1)代表原始状态下远平面上的点,(nx , ny , unkown , z)代表挤压后远平面的点。

于是,根据上面的这个式子就能够先写出矩阵的一部分信息:

在这里插入图片描述
接下来的任务就是寻找第三行的数值:

第三行的值是有关于z的变换的关系,如果能找到z和 z’ 之间的关系,就能够写出第三行的数值,由观察可以得出:

  • 所有近平面上的点都没有发生变换(因为所有的平面都要挤压的近平面的大小,近平面并不需要挤压,所以不发生变化)
  • 所有远平面上的点的z的分量不会发生变化(因为挤压只挤压了平面的大小,并没有移动远平面的位置)

根据上述第一点,近平面点不变,可以得到:

在这里插入图片描述

因为近平面的点不变,所以输入的点和输出的点应该是相等的,同一个点
在这里插入图片描述

由这个式子可以得出:第三行必定是为(0,0,A , B)的格式,并且

在这里插入图片描述

进一步推到得到:

在这里插入图片描述
然后再利用上述的第二点:在远平面上的任何点的z值都不会发生变换,比如选一远平面上的点为(0,0,f,1),则:

在这里插入图片描述

根据两个等式,就可以求A和B的值:

在这里插入图片描述

最后就能够获得”挤压变换“的矩阵
在这里插入图片描述
接下来应该做什么?

  • 先做正射投影
  • 透视投影的变换就是正射投影和挤压变换的叠加:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMES101-现代计算机图形学入门-闫令琪 - lecture9 着色3(Shading 3) - 课后笔记

着色3(Shading 3) 重心坐标纹理查询纹理应用 插值 - 重心坐标 (Barycentric Coordinates) 为什么要插值? 能够获得三角形三个固定顶点的属性,但是不知道三角形内部的属性希望三角形内部属性能有一个平滑…

GAMES101-现代计算机图形学入门-闫令琪 - lecture6 光栅化2(抗锯齿) - 课后笔记

光栅化2(抗锯齿)(Rasterization 2 - Antialiasing) 抗锯齿的内容包括: 采样理论(Sampling theory)抗锯齿的实践应用(Antialiasing in practice) 接着上节 我们采样是…

GAMES101-现代计算机图形学入门-闫令琪 - lecture5 光栅化(三角形的离散化) - 课后笔记

光栅化(三角形的离散化)(Rasterization1 (Triangles)) 接着上面的透视投影开始: 如何确定一个近平面的 l(left) , r(right) , b(bottom) , t(top)四个面?通常使用竖直可视角度(vertical field…

GAMES101-现代计算机图形学入门-闫令琪 - lecture3 变换(transformation) - 课后笔记

变换 为什么要变换? 变换有两种,一种 model 和 view 变换,其中model变换中包括缩放, 而view则主要是讲3D投影到2D的画面上 二维变换 要找到一个变换,实际上就是寻找变换后得坐标(x‘,y’)和变换之前的坐标&#xf…

GAMES101-现代计算机图形学入门-闫令琪 - lecture7 着色(Shading) - 课后笔记

着色(Shading) 可视性 / 遮挡 Z - 缓冲 (Z - buffering,深度缓冲) 着色 光照 和 着色 (illunmination & Shading) 画家算法(Painter s Algorithm) 先注明一下&am…

全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门场景问题智能生成应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和…

记一次alertmanager发送邮件失败的处理过程

文章目录 0 说明环境说明阅读说明 1 先验证smtp信息是否正确2 配置alertmanager配置文件并触发告警3 解决 smtp.plainAuth failed: wrong host name4 解决 dial tcp 127.0.0.1:5001: connect: connection refused5 解决 配置文件不对应的问题6 解决configmap跟挂载文件名不对应…

使用telnet客户端发送假冒邮件出现由某某代发怎么解决

使用telnet客户端发送假冒邮件出现由某某代发怎么解决 步骤如下,打码的是邮箱地址 想知道为什么我的有"由某某代发",而别人的没有,都是通过同样的操作在自己的电脑上操作的

奇葩经历之一_Hotmail邮箱无法查看和发送任何邮件

起因——“似乎有其他人使用你的帐户!” 因为IP活动异常,微软通知你账号有风险: 自动处理——“别慌,我们停用你的账户,这样就安全了!” 没有任何通知和提示就直接关闭邮箱功能,从这以后&…

记录项目里面用到的几个给国外邮箱发邮件的代码

一些说明: 这几个都可以正常发邮件,但是免费的每天都会有限制,发多了就会黑名单。。。 最终选择了exchange付费的版本,每天可以发1万条邮件,也不是很贵,基础的32一个月的就可以了 import javax.mail.inte…

JavaMail邮件发送不成功的那些坑人情况及分析说明(巨坑跳出专用姿势)

https://blog.csdn.net/xyw591238/article/details/69530950 前言 JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有详细的中文注解。但是由于JavaMail的机制设置不够完善,特别是异常出错时的参考信息太少,给…

Python通过发邮件通知自己电脑被入侵

我对IT技术有着狂热的追求,虽然现在很渣,但是我有颗钻研的心,例外我还比较喜欢看小说,相信看过最强黑客的人对里面的黑客的技术佩服得无以复加,黑客一般对自己的电脑数据都比较在意,一般都会设置些密码等并…

如何在线伪造邮箱发件人,用任意邮箱发送邮件

今天邮箱收到一封自己域名发过来的邮件,但是询问当事人说并没有发送相关邮件,于是去百度了下,看是否可以伪造发件人,于是找到一个网站 http://tool.chacuo.net/mailanonymous,这个网站可以用任意的邮箱地址发邮件&…

单播通信、主播通信和广播通信

单播 简介 单播(unicast)是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。每次只有两个实体相互通信,发送端和接收端都是唯一确定的。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用…

Qt 之图形(转换)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。 QTransform 与 QMatrix 不…

全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rotate(45);QLabel *Label new QLabel(); Label-…

网页特效——女儿国国王

目录 💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝&…

不使用插件,小程序也能完整的渲染富文本(视频展现,图片自适应)

用过小程序rict-text的帅哥靓女们(说的就是正在看文章的你)都知道,rich-text是无法解析富文本中的video标签的,本文教你如何优雅的在不使用插件的情况下完整的渲染富文本 首先是富文本图片自适应的问题 当我们从后端拿到富文本数…

让AI替你打工?CHATGPT提升开发效率

1 需求分析 提取需求关键点 ChatGPT 通过对需求文档的分析,自动提取关键需求和功能点,方便开发团队更好地理解项目需求。 2 技术方案 大表更新方案 在某支付业务中,有一个大表4000万行数据,使用的 mysqlA5.6 的版本&#xff…

应聘求职自荐信优秀范文5篇

应聘求职自荐信优秀范文篇1 尊敬的领导: 您好!衷心的感谢您在百忙之中翻阅我的这份材料,并祝愿贵单位事业欣欣向荣,蒸蒸日上! 我是哈尔滨理工大学测控技术及通信工程学院________届毕业生,自从今日大学之后,高考后的轻…