形而上学笔记——仿射变换与齐次坐标

本系列是学习GAMES101-现代计算机图形学导论-颜凌琦所遇到的知识的总结。关于线生成的知识,请参考之前的线生成系列笔记。

/video/bv 1x 7411f 744?p=2

/video/bv 1x 7411f 744?p=3

看完前面的线代系列,看P2就比较简单了,可以用两倍的速度快速复习。在P3,你还可以用基坐标的变换来理解那些2D变换(作者用的是特殊的点推理),比如:

参考/提问/20666664/回答/157400568,这里我只摘录一部分。

简单来说,“仿射变换”就是:“线性变换”+“平移”。

综上所述,线性变换是通过矩阵乘法实现的。

从几何直观来看只有两个要点:

原点不变。

上一节我们说过,线性变换是通过矩阵乘法来实现的,仿射变换不能只通过矩阵乘法来实现,还要通过加法来实现。

参考/提问/26655998/回答/43847213

我来回答,分为两个问题:

首先,我们用一个向量来表示空间中的一个点:r=[rx,ry,rz]

如果要翻译的话,翻译的向量是:t=[tx,ty,tz]

那么正常的做法是:r+t=[rx+tx,ry+ty,rz+tz]

如果不引入齐次坐标,简单通过3×3矩阵乘法实现平移。你要做的是找到一个矩阵m使得rm=r+t=[rx+tx,ry+ty,rz+tz]

然后你会发现你永远找不到这样的矩阵。

所以我们需要引入一个新的维度,原来的r=[rx,ry,rz,1]。然后我们可以找一个4X4的矩阵来实现平移。

在计算机图形学中,坐标变换通常不是单一的,一个几何体可能被设计成在每一帧中有多次平移、旋转、缩放等变化。我们通常通过级联各种子变化矩阵得到一个最终的变化矩阵,从而减少计算量。所以我们需要把翻译表达成一个变化矩阵。所以只能引入齐次坐标系。

关于齐次坐标的理解

我还没有完全理解对齐子坐标的概念,只看到大部分书都说“齐次坐标在仿射变换中非常方便”,然后就没有后记了。今天在一个叫“三百年重生”的博客上看到一篇关于透视投影变换讨论的文章,其中对齐子坐标有非常精辟的解释,尤其是对那句话:“齐次坐标表示是计算机图形学的重要手段之一,它不仅—— F.S. Hill,JR .

因为作者真的把对齐坐标解释的很好,我就原封不动的提取出来:

对于一个向量V和基oabc,我们可以找到一组坐标(v1,v2,v3)使得v = v1 a+v2 b+v3 c (1)。

对于一个点P,可以找到一组坐标(p1,p2,p3),这样P–O = P 1A+P2 B+P3 C(2)

从上面向量和点的表达式可以看出,为了在坐标系中表示一个点(如P),我们把点的位置看作是离这个基的原点O的位移,即向量-P-O(有的书把这样的向量叫做位置向量-从坐标原点开始的特殊向量),我们在表示这个向量的同时,把点P: P = O+P6用等价的方式表示。

(1)(3)是矢量和点在坐标系中的不同表达。可以看出,虽然矢量和点都是以代数分量的形式表示的,但是表示一个点比矢量需要更多的信息。如果我写一个代数分量表示(1,4,7),谁知道是向量还是点!

我们现在把(1)(3)写成一个矩阵:v = (v1 v2 v3 0) X (a b c o)。

P = (p1 p2 p3 1) X (a b c o),其中(a,b,c,o)是坐标基矩阵,右边的列向量分别是向量v和基下点p的坐标。这样,向量和点在相同的基下有不同的表达式:3D向量的第四代数分量是0,而3D点的第四代数分量是1。这种用四个代数分量表示3D几何概念的方式是齐次坐标表示。

这样,如果把上面的(1,4,7)写成(1,4,7,0),就是向量;如果是(1,4,7,1),则是一个点。以下是法线坐标和齐次坐标之间的转换:

如果(x,y,z)是一个点,就变成(x,y,z,1);

如果(x,y,z)是一个向量,它就变成(x,y,z,0)。

如果是(x,y,z,1),已知是一个点,变成(x,y,z);

如果是(x,y,z,0),我们知道它是一个向量,仍然变成(x,y,z)。

以上就是齐次坐标区分向量和点的方法。由此我们可以认为,对于最常见的三种仿射变换,平移T、旋转R和缩放S,平移变换只对点有意义,因为普通向量没有位置的概念,只有大小和方向。

旋转和缩放对于矢量和点都是有意义的,你可以用上面类似的同质表示来检测它们。可见齐次坐标对于仿射变换是非常方便的。

另外,对于一个普通坐标的点P=(Px,Py,Pz),有一个对应的齐次坐标族(wPx,wPy,wPz,w),其中w不等于零。比如P(1,4,7)的齐次坐标是(1,4,7,1),(2,8,14,2),(-0.1,-0.4,-0.4。所以,如果把一个点从普通坐标换成齐次坐标,把x,y,z,y,z乘以同一个非零数w,再加上第四个分量w;如果把齐次坐标转换成普通坐标,前三个坐标同时除以第四个坐标,然后去掉第四个分量。

齐次坐标用四个分量来表示3D概念,这样平移变换就可以用矩阵来进行,这样更便于进行仿射(线性)变换,正如小F.S. Hill所说。因为图形硬件已经普遍支持齐次坐标和矩阵乘法,所以推动了齐次坐标的使用,使它看起来像是图形中的一个标准。

这个设计很完美,保证了下图的计算仍然有意义:

上图中,在一个点上再加一个点,结果是两个点的结束,因为w=1+1=2。

现在,齐次坐标中的变换如下:

上图很好理解吧?(x,y,1)表示齐次坐标下的变量,通过左乘旋转45度,再通过左乘平移。