相机空间
上一节提到了投影变换 ,投影变换简单点说就是在我们的视角看物体,所以我们总想让摄像机的视线沿z轴方向。
很多人了解过,从一个坐标系变换到另一个坐标系,其实通过复合变换一步就能实现。可是我们需要单独求出相机空间的变换矩阵,再乘以投影矩阵。为什么不能一步从世界坐标系到投影变换呢?
我们在实际操作中,比如unity,我们可以任意改变摄像机的角度,方向。所以,摄像机坐标系它并不是固定的,是随时变化的。所以要多一步求出摄像机的变换。
相机空间我们称之为UVN,看着感觉很简单,UVN,三个轴组成新的坐标系嘛,取了三个别名而已。
其实我觉得最最最难理解的地方就是UVN,因为相机的移动以及角度偏移都是通过对UVN做变换的。难道UVN不应该是(1,0,0)类似于这种的基向量吗?
UVN的确应该是基向量,初始化是和世界坐标系重叠的,但是经过人物移动,上下左右的看,UNV实质上应该是不断变化后的三个基向量,并且他们的向量是相对于世界坐标系的。但是在摄像机坐标系中的物体是相对于相机坐标系的。
什么意思呢,要理解UVN的一个很大的作用,它其实就是变换矩阵的三个行向量。我们从世界坐标系变换到相机坐标系,实际上就是空间中一个点,求出在U方向上的长度,V方向的一个长度,N方向上的一个长度。所以和单位基向量做向量叉乘就可以求出。
综上,世界坐标系中的点,通过三个基向量,求得摄像机坐标系中的位置。三个向量,都是世界坐标系中的值。当我们对相机做移动变换的时候,我们会变换UVN向量,实际上是taget向量(向前方看的方向)以及up向量(人物头顶的方向),另一个left/right通过这两个向量可以求得。