从模型空间到屏幕空间的转换

图形学基础- 物体坐标从模型空间到屏幕坐标空间的转换

模型空间到世界坐标空间

  fragment就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的

模型坐标是一个模型基于一个锚点的相对位置,这个锚点就是模型坐标空间下的原点。若在世界空间坐标表示模型坐标的x,y,z坐标轴表示为xm,ym,zm,模型空间的坐标轴为Om则在模型空间下的坐标(a,b,c)在世界坐标空间下表示为:
Pw = Oc + axm + bym + czm
则从模型坐标转换到世界坐标的转换矩阵为(齐次矩阵)Pm-w

齐次矩阵
在unity中,Transform组件模型在世界空间中的位置。包括缩放、旋转、平移。在求有模型空间转换到世界空间中的转换矩阵时从左到右的矩阵一次时平移,旋转,缩放。相乘得到的矩阵就能将模型空间中的点转换到世界空间中。(每个模型都是一个模型空间)。shader入门精要[75]页。

从世界坐标空间转换到观察空间

观察空间也称为摄像机空间观察空间可以认为是模型空间的一个特例Unity 模型空间和世界空间中选用的都是左手坐标系,而在观察空间中使用的是右手坐标系。摄像机在观察空间的原点,+x指向右方,+y指向摄像机的上方,+z指向摄像机的后方。计算由世界空间转换到模型坐标空间有两种方式

  1. 将观察空间看成是普通的模型空间,根据transform中的信息求得从观察空间转换到世界空间的矩阵,其逆矩阵就是将点从世界空间转换到观察空间
  2. 平移整个观察空间,让摄像机原点位于世界坐标的原点,坐标轴与世界空间中的坐标轴重合即可。
    在用第二种方法的时候,当知道摄像机是先按(30, 0,0)进行旋转,然后按(0, 10,-10)进行了平移。为了把摄像机移回到坐标原点,先进行(0,-10, 10)进行平移,再按(-30, 0, 0)进行旋转,即旋转矩阵*平移矩阵(注意位置不可以改变)。因为摄像机是右手坐标系,还需将该矩阵的Z值取反。
    (对于转换的思考:在第一种的转换方式中,模型空间中都有一个坐标原点,而它与世界空间中的原点的相对位置即transform中的信息。我们可以看成是将世界空间中的原点与该矩阵相乘得到模型空间中的原点即锚点在世界空间中的位置,则该模型中的其他点也可以与这个矩阵相乘得到在世界空间坐标中的位置)

裁剪空间

是定义了一个视锥体,在视锥体里面的物体能够被看见。这需要一个裁剪矩阵,裁剪矩阵的目的是在给定视锥体边界的情况下,通过与该裁剪矩阵相乘,判断通过x,y,z与W分量的比较(x,y,z的值要在-w与w之间)来判断观察空间中的点有没有在视线空间中。下图为观察空间中的视锥体坐标与裁剪矩阵相乘之后的结果。在这里插入图片描述
求此裁剪矩阵的方式也许与games101课程中的将视锥体变换成近裁剪面与远裁剪面大小相等的一个视锥体。
在这里插入图片描述

利用三角形相似原理,求得远裁剪面的x,y变换为的x’, y’。同理可得x’ = (n/z)*x
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在齐次坐标中若第四个分量为0,如(1, 1,1, 0)则代表的是一个矢量。若第四个分量不为0则代表坐标,且(1, 1,1, 1)与 (2, 2,2, 2)代表的是同一个点。要除以w分量。
近裁剪面的点与矩阵相乘值不变,远裁剪面的z值不变,最后求得矩阵
在这里插入图片描述

屏幕空间

在上面可知观察空间的坐标与裁剪举证相乘后就可以开始裁剪,x,y,z值不在-w与w之间的坐标就可以裁剪掉。将坐标的x,y,z分量除以w分量就可以将其视锥体坐标规范到一个立方体中其坐标值的范围是-1到1。可以映射到0-1。再与像素的高宽相乘就可以得到屏幕空间的x,y像素坐标。z可以认为是深度。
在这里插入图片描述
注意:(齐次除法只能在片段做色器中进行除法,因为从顶点做色器到片段做色器之间还要进行插值)

参考:
unity shader从入门到精通
games101课程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值