一、任意轴旋转变换
其实有了之前相对于任意点的变换,我们会得到一些启发,那就是既然我们只会绕轴旋转。同时我们也可以想见,这个过程要复杂许多。要想让轴靠近坐标轴,首先把它往轴上靠。所以可以先把AB进行平移,让a点与坐标轴重合,这样一来,AB就到了O'B上了。这个时候就对应着这个变换矩阵Ta。
接下来,就要进行旋转。显然我们首先要让它落到某个坐标平面上。
我们可以绕着X轴正传阿尔法角,就可以把OE'B转动到了XOZ平面上。那么BE'点是点B在对应平面上的投影。
那么这个平面,与Z轴的夹角,就是阿尔法。
我们这里可以沿BE’点分别对Y轴和Z轴作垂线。那么垂点分别就是D和E。我们就可以算出阿尔法的余弦值是这样的,而正弦值,就是这个式子。
考虑到OE'B的方向数是ABC,因此,就OE'等于C。
接下来,就是之前变换的逆变换了。对于矩阵运算来说,T1乘以T2的逆等于T2的逆乘以T1的逆,所以之前的ta/trx/try的逆就是try的逆乘以TRX的泥,再乘以Ta的逆。
总之我们最终得到了相对于ab轴的旋转变换矩阵trab这样的一个计算式。
观察者也能动之前讲的是三维模型,动起来指的是模型本身在世界坐标系中的运动。
我们用矩阵运算的方法进行了解决。那么在实际生活中,还可以移动观察点和改变观察方向,以便在不同的距离和角度上观察物体。
这就是我们今天要说的,观察者也能动。而这里对应的变换,实际上也就是视图变换。
怎么变化?首先,我们对观察坐标系进行定义,这里的点P0/X0/Y0/Z0就是观察参考点,它是观察坐标系的原点,一般认为,就是视点。
如果我们观察物体的焦点在这个P点上,那么P/P0就是观察坐标系ZV轴的方向。显然,焦点不同也就是P不同,ZV轴也就不同了。
Yv_对于我们观察的正方向,就像我们给一个人拍照,可以正着拍,也可以斜着拍,那么这里的正方向,就是YV。
有了两个方向,按照右手系的规则就可以定义出XV了。这样,我们就可以定义出观察参考坐标系了。
而我们要进行的观察变换,也叫视图变换,实际上,就是把世界坐标系变换到观察坐标系中。
以这里的点Q为例,实际上,是求出世界坐标系中点Q(XYZ)在观察坐标系中的坐标值。
大家应该有点联想到刚才的绕任意轴旋转了,的确有些相似
先要平移观察参考点到用户坐标系原点。
然后进行旋转变换,分别让XV,YV和ZV轴对应到用户坐标系中的XY和Z轴就可以了呢?
的确跟刚才的Trab的计算有些类似。
对于平移,我们很快可以求出它的平移矢量,分别是负的X0,负的Y0和负的Z0。而旋转,我们可以把YV转动到Y轴,然后再绕Y轴旋转,让xv和zv分别与X轴、Z轴重合。
好不容易求出来的值,不能在逆变换回去了
在实际的应用中,模型变换域观察变换具有对偶性,也就是模型动,我们看到的就动;而模型不动,观察者动,我们看到的景物也发生了变化。
但很多时候,世界坐标系,也就说用户坐标系中,存在多个模型, 有的静止,有的运动,这样一来,再结合观察者在场景中的漫游,就可以看到各种不同的景象了。