OPENGL大量使用齐次坐标,背后的原因很简单,就是计算方便高效。我们用例子解释下背后简单的原理和目的。
举个二位坐标的例子:
学过线性代数的都知道,显然:
我们可以用矩阵来表示:
如果我们要对齐进行缩放和旋转操作,同样可以通过矩阵来操作:
缩放变换:
旋转:
更一般的, 我们在处理图形的时候,都是一串猛如虎的操作,也就是说经常性的缩放、旋转、平移一起变换。例如先放大2倍,然后旋转45度,然后再缩小0.5倍。那么就可以表示成矩阵乘法串接的形式:
这样,不管有多少次变换,都可以用矩阵乘法来实现。 这就非常方便了,而且计算非常的快,但是这时候我们发现,还有一种操作不能用这种方法,就是平移。当然我们可以用别的方法来绕过,但是这就损失了效率和统一性。带来很多的不便。
齐次坐标就是为了克服这一缺点的。
这种方法就是“升维”,引入“齐次坐标”,将图像从平面2D坐标变成3D坐标。我们看看平移变换的矩阵形式:
将其升维,变成3维,上式就可以表示成:
这样,平移变换通过升维后的齐次坐标,也变成了矩阵乘法的形式。当然缩放变换和旋转变换的矩阵形式也得改一改,统一变成3维的形式。
统一 一下,我们同样对旋转和缩放进行升维。
缩放变换:
旋转变换:
这样说就很容易理解齐次坐标了。
评论(0)
您还未登录,请登录后发表或查看评论