空间变换

2017-11-10  本文已影响279人  晓龙酱

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

已知条件:

已知规则:
点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列来对法线,光照方向进行空间变换了。

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

小结

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

观察空间

其它

裁剪空间

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

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

投影矩阵的意义:
投影矩阵的目的:
投影矩阵的推导

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]。判断一个变换后的顶点是不是位于视锥体内使用的不等式与投影矩阵一样,这种通用性也是为什么要使用投影矩阵的原因之一。

屏幕空间

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

主要有以下两个步骤:

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

上一篇 下一篇

猜你喜欢

热点阅读