修改形状的顺序

时间:2016-04-19 21:18:17

标签: opengl transformation

我刚开始学习OpenGL中的转换,我对将形状修改为不同位置,角度或大小的步骤感到困惑。

例如,我们在2D场景中有一个房子如下: enter image description here

假设我想将(a)中的场景转换为房子(b)部分的场景,我该如何决定是缩放它,翻译它还是先旋转它?结果会有所不同吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

根据变换的顺序,结果肯定会有所不同。

以下是一些直接回答您问题的伪代码(假设每个函数都以x,y,z作为参数):

translate(-6, 0, 0)
rotate(0, 0, 135)
scale(2, 1, 1)

现在让我们来看看为什么这个订单很重要!

首先,这是我们没有任何转换的情况: no transforms

接下来,让我们看看当我们逆时针旋转45°然后沿正X轴平移时会发生什么:

rotate then translate

注意翻译是如何导致广场向右上角移动的?这是因为旋转变换也修改了局部轴。现在正X指向右上角。如果我们旋转180°,那么+ X将指向左侧而不是右侧。

现在让我们看看当我们以相反的顺序执行相同的转换时会发生什么:

translate then rotate

这次翻译按预期将广场向右移动。之后,广场被旋转。

查看open.gl page on Transformations以获取更多详细信息,特别是围绕所有这些背后的数学。