空间变换

如何推导出两个空间之间的变换矩阵呢?

已知条件:

  • 空间A在空间B中的坐标轴矢量为
    • x轴 Xa(Xax, Xay, Xaz)
    • y轴 Ya(Xay, Yay, Zay)
    • z轴 Za(Xaz, Yay, Zaz)
  • 空间A的原点在空间B中的坐标为
    Oa(Oax, Oay, Oaz)

已知规则:
点p(x,y,z)的几何意义在于,从原点开始,先后按照X,Y,Z轴三个方向分别平移x,y,z个单位,得到的点即为p。

空间A到空间B的变换矩阵
由以上可知,已知空间B中的一点

Pb(a,b,c)

则其在空间A中的坐标为:

Pa = Oa + a * Xa + b * Ya + c * Za

将以上表达式,转换为按列展开的矩阵表达式:

现在就得到了将空间A中的点转换到空间B中的变换矩阵

因为平移变换对矢量无效,所以将以上矩阵的最后一行,最后一列去除,即为矢量对应的变换矩阵


这就是为什么会看到Shader中解取了变换矩阵的前3行3列来对法线,光照方向进行空间变换了。

最后需要注意的是,实际应用中的三个轴矢量有可能是经过缩放变换了,所以不能保证是规一化的。

小结

  • 由以上推导可以看出,空间A到空间B的变换矩阵,只需要将空间A在空间B中的轴矢量,原点坐标分别按列展开构造矩阵即可。

空间B到空间A的变换矩阵

  • 因为已知了空间A到空间B的变换矩阵Mab,则只需要求其逆矩阵即可。

  • 如果空间A的三个轴向量是规一化的,即没有经过缩放变换的,则矩阵Mab是正交的,所以其转置矩阵就是其逆矩阵。由此得到空间B到空间A的变换矩阵:

  • 通过变换矩阵可以得到,空间B在空间A中的三个轴矢量分别为矩阵Mba的前三列。又因为是转置矩阵,所以还是矩阵Mab的前三行。

  • 加上平移之后的仿射变换矩阵为

观察空间

  • Unity中相机空间中,正前方指向-z轴方向。所以在用到Camera.cameraToWorldMatrix, Camera.worldToCamraMatrix等接口时需要多注意。

  • 视矩阵推导

    • 一方面可以根据上述轴方向的方法构造矩阵
    • 另一方面,世界中的点相对于相机的坐标即为其相机空间坐标,则只需要计算出将相机还原到世界原点的变换即可,然后对世界中的点施以此变换即为此点相对于相机的坐标了。
      • 已知相机在世界中的坐标p(10,0,0)与旋转r(30,0,0),其意义为将世界原点渲染r,然后再按p平移。

      • 那么相机世界中的原点到世界原点的变换为上一步操作的逆操作,先反向平移p,再反向旋转r。最后由于相机空间使用右手坐标系,正向为-z方向,再将z取反即可。


      • 现在使用p,r分别构造平移矩阵与旋转矩阵即可

其它

  • 观察空间与投影空间不同,屏幕空间是一个二维空间,从观察空间到屏幕空间的变换操作,叫投影

裁剪空间

顶点从相机空间转换到裁剪空间(也称齐次裁剪空间),这个用于变换的矩阵称为裁剪矩阵,也称为投影矩阵

裁剪空间由视锥体决定。投影分为透视投影,正交投影。其中透视投影有近大远小的效果,模拟了人眼的视觉效果。

投影矩阵的意义:
  • 由于存在两种投影,如果直接使用视锥体定义的空间来进行裁剪,则不同的投影就需要不同的处理过程,同时对于透视视锥体来说,判断一个点是否处于其内容比较困难。因些需要使用一种更加通用,方便的方式来进行裁剪工作
投影矩阵的目的:
  • 投影预处理
    虽然投影矩阵中有『投影』二字,但并没有真正的进行投影,而是在做投影前的预处理。真正的投影发生在齐次除法中。经过投影矩阵的变换后,顶点分量w不再为1,而是具体有特殊的值跟意义。

  • 坐标缩放
    对x,y,z坐标分量进行缩放,w分量存储了这三个分量的范围值。如果这三个分量在这个范围内,则说明这个顶点在裁剪空间内,进而不会被剔除掉。

投影矩阵的推导

http://blog.csdn.net/popy007/article/details/1797121

又因为,tan(fov/2) = (h/2) / N,将N = h / ( 2tan(fov/2) )代入矩阵M,得到由Fov与Aspect表示的投影变换矩阵:

变换后的点为

image.png

可以看出,投影矩阵的本质就是对x,y,z进行缩放,对z还有平移,以便于裁剪。此时顶点的w分量已经不是1了。这时只需要判断x,y,z三个分量是否在w值的范围内即可

-w <= x' <= w
-w <= y' <= w
-w <= z' <= w
正交投影矩阵

变换矩阵为


变换后的点为


使用正交投影矩阵变换为,顶点的w分量仍然为1。本质是因为投影矩阵最后一行不同。透视投影矩阵的最后一行是[0 0 -1 0],而正交投影矩阵的最后一行是[0 0 0 1]。判断一个变换后的顶点是不是位于视锥体内使用的不等式与投影矩阵一样,这种通用性也是为什么要使用投影矩阵的原因之一。

屏幕空间

经过投影矩阵变换后的顶点,经过裁剪操作,就可以经过真正的投影操作了,将视锥体投影到屏幕空间中。经过这一步变换,得到最终的屏幕像素坐标。

主要有以下两个步骤:

  • 齐次除法,也称为透视除法。

    将x,y,z三个分量分别除以w分量即可。得到的坐标叫做归一化设备坐标(Normalized Device Coordinates, NDC)

    Unity使用OpenGL规范,NDC坐标x,y,z的范围都为[-1,1],而DirectX平台中,z在[0,1]范围内。

  • 屏幕像素坐标计算

    Unity中屏幕空间左下角为原点,与OpenGL相同,而DirectX平台中左上角为原点。

将归一化后的NDC坐标代入公式,得到顶点对应的屏幕像素坐标。

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

推荐阅读更多精彩内容