第四季 变换(二)

0对于上篇旋转矩阵的扩充

如果我们有个旋转矩阵,旋转θ度,那矩阵如下


旋转矩阵

而如果我们旋转了 -θ度的话,由于三角函数 sin-θ = -sinθ, cos-θ = cosθ
所欲我们可以得出


旋转-θ

搜们观察这两个矩阵可以发现,R-θ是 Rθ的转置矩阵

而从定义上来看,R-θ和Rθ是互逆的 这里我们发现了一个有趣的地方

在旋转矩阵中,Rθ的逆矩阵 = Rθ的转置矩阵。
扩充:数学上对于有这种性质的矩阵称为正交矩阵

1.三维空间中的变换
三维空间中的缩放矩阵和平移矩阵

和二维中的基本相同,略过

旋转矩阵:


三维空间中绕某轴旋转

这里我们发现y轴和其他稍微有所区别,x 和 z都是旋转矩阵中右上为负,而y轴正好相反。其实这里比较好理解: x轴的方向我们可以用火 Y轴叉乘Z轴来得出,Z轴的方向我们可以用X轴叉乘y轴得出。而Y轴的方向,我们需要用Z轴叉乘X轴得出,和其他的顺序是相反的。

对于任何一个复杂的旋转,我们都可以将其拆分分解为3个绕XYZ轴的简单旋转,如下



我们叫做欧拉角

对于一个任意旋转,都有如下公式

罗格里德斯旋转公式

这里我们发现对于任意轴他只给了一个向量N,也就是说公式是默认所有旋转的轴都是过原点的。那如果对于一个不过原点的轴旋转,可以其平移到过原点,然后计算旋转,之后再平移回去即可。这也是旋转处理的基本思路:先平移到过原点再计算旋转再平移回去。

扩充 这里的欧拉角和四元数的优劣

例如我们由一个二维选旋转矩阵, 一个是旋转15°,一个是旋转25°,如果我们两个加起来求平均 我们可以知道他得出的结果其实并不是旋转20°的结果。也就是欧拉角是无法去做到线性插值的(因为三角函数是非线性的),而四元数可以解决这个问题,并且使用欧拉角会无法避免的带来万向节锁锁死,四元数也同样可以避免。

2.视图变换

首先设想一下我们如何拍下一张照片:
1找到一个地方放置模型 (模型变换)
2 找到一个好的角度放置相机 (视图变换)
3 最后拍照 (投影变换,3d空间转2d照片)
简称 MVP 变换



其中比较重要的就是视图变换
我们如何能表示一个视图变换呢?首先我们需要定义一个相机,需要一下数据
1 位置
2 朝向
3 他的竖直方向 (是不是歪的)
也就是说,有了这三个数据 我们定义一个相机他的位置数据


然后我们思考下这样一个问题。例如桌放着一台手机和显示器,然后我们把手机显示器粘在桌子上,让桌子移动或旋转任意角度,那么对于手机和桌子来说 他们在屋子里的坐标虽然变化了 但是他们之间的相对坐标并没有发生该表。而同理,我们是否可以把观察相机的位置信息当做原点和坐标轴,然后让所有相机观察的物体变换到对应位置,这样相机看到的东西 其实也是一样的。
通常来说,在相机空间我们把相机坐标定位原点,看向的方向为-z x,y轴不变


相机空间的约定俗称

接下来就是如何将观测点数据变为以相机空间数据的坐标了,其实相当于以下步骤
先平移相机坐标e->原点的数据,然后将旋转的相机当前旋转矩阵的逆矩阵 ,然后将z轴选咋混到-z,y->y x->x


那么我们怎么写出对应的矩阵呢,首先我们先处理平移矩阵,然后将其旋转到对应旋转方向。
在处理旋转矩阵的时候,我们可能会发现 如果我们是从坐标轴旋转到对应轴,其实是相对好计算出值得,但反之就比较麻烦了。这里我们用到我们开篇总结的知识:



也就是我们先计算旋转的逆矩阵,也就是从当前坐标轴旋转到相机坐标轴,然后再将其转职,就得到了我们想要的结果


image.png

这里简单总结下,其实就是所有的物体随着相机一起转换到相机空间,并且同时需要模型空间中的位置信息,为了之后投影矩阵使用.
3.投影变换
image.png

这里其实就是两种投影 正交投影和 透视投影 这两者的区别就是 透视投影会有近大远小的现象,正交投影不会有。这两张图可能看起来效果更明显,左边是透视投影,右边是正交投影


正交投影:

这里我们来看个简单的处理 相机位于原点,看向-z方向 物体 X Y 坐标都为0,坐标也在-z 位置上 这时候我们会发现只要把物体的Z坐标抛弃只保留 X Y,就会得到想要的对应结果,但这里我们会发现这样一个问题:物体间的前和后无法去表示了



平行投影到底在做什么呢我们可以看做他定义了一个空间中的立方体,这个立方体就是他观察到的空间,他只需要 x~-x y~-y z~-z 的值,然后我们通过变换可以先平移到原点,再讲三个周的范围都取值到-1~1


然后我们需要把这个变换写出它对应的变换矩阵 这里就很简单了,我们先平移再缩放,这个矩阵也是比较简单

右手坐标系,使用左乘
透视投影

透视投影有这些特性:
计算机图形中最常用的投影方式
近大远小
平行线不再平行,他会在某个点相交


透视投影

这里我们要回一下之前的知识,就是关于其次坐标相关的。我们知道点的坐标是可以乘上一个值得,例如
(x,y,z,1) * k = (kx,ky,kz,k) (k≠0)
同样也可以(x,y,z,1) * z = (xz,yz,z^2)
但其实来说,这三个点表示的都是同一个点 :(x,y,z,1) 只是不同的写法


image.png

透视投影需要那些呢
首先我们需要一个近平面和一个远平面 , 远平面比近平面大,这个用我们之前推导的正交矩阵是无法处理的。但我们可以想办法把呀从现在的形状压成一个正方体,然后再做一遍正交投影即可,现在我们只需要做出这个挤压变换

image.png

我们先从侧面来看,我们可以找到一个相似三角形 所以其实对于每个点x y挤压后的位置,其实就等于他原始的位置* 图中的 n/z
image.png

所以对于其中的任何一个点与他转换后的点(x',y',z') 我们可以发现下面一个关系
image.png

给予你任何一个x y z的点,在他经过挤压变换之后一定会变成下面中间的点。但这里有个问题就是z是位置的。这里我们可以再转换一下,让他再乘以z 我们就可以得到右边的,虽然我们还是不知道z是什么值

image.png

有了上面之后,我们可以在这两个矩阵之间找一些已知的推导,例如 nx与ny、z

推导出的矩阵

现在我们只剩最后一行来tianchong

这里我们观察下还有什么信息我们是可用的?
有以下两点我们需要注意:
对于近平面上的任何点,运算完之后仍然是原来的点(近平面不会被压缩)
远平面上的点虽然x y 变化了,但z的值仍然不变



首先我们队近平面的性质来推导下
所以就有了一下的推导:对于任何近平面的点(z值为n的点),因为压缩后值不变,所以我们可以将原来的unknow与z推导出来,他就是n^2 与 n。n^2就是原来我们无法推导的哪一行的结果 那我们这里再反过来推导下变换矩阵第三行的值。首先x y 必然是0。因为一旦有不为0的值就会变成 aX+bY+xx,不是一个n^2,这里我们推导出了第三行前两个值都为0



然后我们再来看远平面的性质
远平面中其实有一个特殊点,就是他的中心点(0,0,f) 这个点乘变换矩阵后结果也不变,再加上我们已经推出了第三行中前两个值为0,那么我们就有
image.png

然后连理两个式子,我们就可以解除来A B 的值到底是多少(n,f实际中都是固定值,一个是近平面距离相机的距离一个是远平面距离相机的距离)。现在我们就有了整个压缩变换的矩阵了。我们最后需要做的就是让他再乘上之前的正交投影变换的矩阵,就是我们想要的透视投影了。


image.png

最后我们思考下,用之前的图来看下,对于变换之前的矩阵,例如数遍所在的点,nf的中心点 他在完成压缩之后,这个点的位置是更靠近近平面还是更靠近远平面呢?

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • 一.仿射变换 1.模型变换2.视图变换 理解变换表达成矩阵:1.左边一张图,图上任一点都可以表达成[x,y]的两行...
    Trigger_o阅读 2,194评论 0 1
  • 概述 在图形学渲染管线中,一个顶点坐标,大概要经历局部坐标系、世界坐标系、相机坐标系、裁剪坐标系,最后到窗口坐标系...
    bzyzhang阅读 706评论 0 0
  • 本文同时发布在我的个人博客https://dragon_boy.gitee.io 本章目录概览: 基础变换 特殊变...
    Dragon_boy阅读 588评论 0 0
  • 1 前言 本章我们将会探讨三维视觉,首先会研究三维到二维的投影变换以及其逆变换,然后会介绍多相机立体景深感知。在这...
    RichardJieChen阅读 4,492评论 0 3
  • 1 前言 OpenGL渲染3D模型离不开空间几何的数学理论知识,而本篇文章的目的就是对空间几何进行简单的介绍,并对...
    RichardJieChen阅读 7,009评论 1 11