OPENGL--快速理解齐次坐标作用

OPENGL大量使用齐次坐标,背后的原因很简单,就是计算方便高效。我们用例子解释下背后简单的原理和目的。

举个二位坐标的例子:

学过线性代数的都知道,显然:

[公式]

[公式]

我们可以用矩阵来表示:

[公式]

如果我们要对齐进行缩放和旋转操作,同样可以通过矩阵来操作:

缩放变换:

[公式]

旋转:

[公式]

更一般的, 我们在处理图形的时候,都是一串猛如虎的操作,也就是说经常性的缩放、旋转、平移一起变换。例如先放大2倍,然后旋转45度,然后再缩小0.5倍。那么就可以表示成矩阵乘法串接的形式:

[公式]

这样,不管有多少次变换,都可以用矩阵乘法来实现。 这就非常方便了,而且计算非常的快,但是这时候我们发现,还有一种操作不能用这种方法,就是平移。当然我们可以用别的方法来绕过,但是这就损失了效率和统一性。带来很多的不便。

齐次坐标就是为了克服这一缺点的。

这种方法就是“升维”,引入“齐次坐标”,将图像从平面2D坐标变成3D坐标。我们看看平移变换的矩阵形式:

[公式]

将其升维,变成3维,上式就可以表示成:

[公式]

这样,平移变换通过升维后的齐次坐标,也变成了矩阵乘法的形式。当然缩放变换和旋转变换的矩阵形式也得改一改,统一变成3维的形式。

统一 一下,我们同样对旋转和缩放进行升维。

缩放变换:

[公式]

旋转变换:

[公式]

这样说就很容易理解齐次坐标了。