赞
踩
最近在进行一些基础知识的回顾和复习,补上了之前一直云里雾里,一直调用接口但是并没有自己推过的变换矩阵
如果有出现错误的地方,欢迎指出
将模型上的点从自身的坐标系转换到世界坐标系下
矩阵相乘的顺序为先缩放,再旋转,再平移
这一步的主要目的是将世界空间下的物体转换到以摄像机为原点的观察空间下
做法为平移观察空间,让摄像机远点和世界坐标原点相重合。摄像机在世界空间中是先旋转再平移。但是为了方便计算,所以求从原点到摄像机的变换矩阵,再对齐求逆。(正交矩阵的逆矩阵就是他自己的转置矩阵,所以这样会很好算。详情可以见闫老师的Games101)
变换到裁剪空间下的目的主要是需要再做一次剔除,判断顶点是否在可见范围内。因此,P矩阵的主要作用是对X,Y,Z进行缩放,用W分量作为投影值(透视除法)。
在这之后,还有一次比较重要的真正的投影变换,分为正交投影变换和透视投影两种。
正交投影的矩阵比较简单,因为没有近大远小的概念,所以根据数据直接计算就可以了(下图引用自闫老师的Games101)
透视投影:
透视投影的矩阵推导稍微麻烦那么一点
首先,我们打开Unity,可以发现一个摄像机的以下几个参数是可以设置的:FOV(视野角度)、近平面(Near),远平面(Far),以及Aspect(视口比),那么我们可以大致画一张图,先将需要的变量摆出来
有了这些变量之后,我们考虑如何将两个平面之间的点放置到屏幕上
参见下图:
通过相似三角形可以算出P点投影到P‘点的数据。同时,由于近平面上的点具有的约束条件,我们可以更进一步的算出x和y通过已知变量表达的关系式
通过化简变形之后可以得到
但是由于Z分量暂时未知,所以我们需要暂时将Z从X和Y的关系式中拿掉,于是有
可以解得投影矩阵为
接着,我们通过得到的矩阵列出和Z相关的方程
由于在标准化设备坐标下,Z也是属于-1到1的,因此,取近平面和远平面两个极端情况解方程即可
最终的矩阵为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。