修改形状的顺序
Orders of Modifying the Shape
我刚开始学习 OpenGL 中的变换,我对将形状修改为不同位置、角度或大小的步骤感到困惑。
例如我们在二维场景中有一个房子如下:
假设我想将(a)中的场景转换为房子(b)中的场景,我应该如何决定是先缩放、平移还是旋转?结果会有所不同吗?
谢谢。
根据转换的顺序,结果肯定会有所不同。
这里有一些伪代码可以直接回答你的问题(假设每个函数都以 x,y,z
作为参数):
translate(-6, 0, 0)
rotate(0, 0, 135)
scale(2, 1, 1)
现在让我们看看为什么这个顺序很重要!
首先,这是我们在没有任何转换的情况下会得到的:
接下来,让我们看看当我们逆时针旋转45°,然后沿正X轴平移时会发生什么:
注意翻译是如何使正方形向右上角移动的吗?这是因为旋转变换也会修改局部轴。现在正 X 指向右上角。如果我们旋转 180°,那么 +X 将指向左侧而不是右侧。
现在让我们看看当我们以相反的顺序执行相同的转换时会发生什么:
这次翻译如预期的那样将方块移到了右边。之后旋转正方形。
查看 open.gl page on Transformations 了解更多详细信息,尤其是所有这些背后的数学知识。
我刚开始学习 OpenGL 中的变换,我对将形状修改为不同位置、角度或大小的步骤感到困惑。
例如我们在二维场景中有一个房子如下:
假设我想将(a)中的场景转换为房子(b)中的场景,我应该如何决定是先缩放、平移还是旋转?结果会有所不同吗?
谢谢。
根据转换的顺序,结果肯定会有所不同。
这里有一些伪代码可以直接回答你的问题(假设每个函数都以 x,y,z
作为参数):
translate(-6, 0, 0)
rotate(0, 0, 135)
scale(2, 1, 1)
现在让我们看看为什么这个顺序很重要!
首先,这是我们在没有任何转换的情况下会得到的:
接下来,让我们看看当我们逆时针旋转45°,然后沿正X轴平移时会发生什么:
注意翻译是如何使正方形向右上角移动的吗?这是因为旋转变换也会修改局部轴。现在正 X 指向右上角。如果我们旋转 180°,那么 +X 将指向左侧而不是右侧。
现在让我们看看当我们以相反的顺序执行相同的转换时会发生什么:
这次翻译如预期的那样将方块移到了右边。之后旋转正方形。
查看 open.gl page on Transformations 了解更多详细信息,尤其是所有这些背后的数学知识。