0

我正在使用可编程管道(OpenGL 4)。问题如下。我有称为“平面”的默认原语,它有 4 个顶点 - 在剪辑空间坐标 [-1, 1] 范围内定义。我从不直接移动它们来缩放平面,而是将比例应用于模型矩阵。因此,例如,要获得宽度 =100,高度 = 50 的平面,我缩放平面:

_modelMatrix.scale(100/2,50/2,1);

我还有一个锚点,它定义了平面的中心,并且可以四处移动以偏移局部中心。问题:一切正常,直到我在移动枢轴后开始缩放平面。例如,如果平面 width=100 和 height=100 ,我想将中心偏移到平面的左上角我将模型矩阵转换为当前位置 + 添加 x 和 y 偏移值(50 和 -50)。我让中心在那里正常。但是,当我再次缩放平面时,枢轴中心不会保持相对于新的比例,但由于它不随对象一起缩放而发生偏移。确保定义的锚点相对于新比例进行调整的正确方法是什么?我知道在固定管道中,通过添加锚点偏移很容易解决通过 API 调用定义顶点时,直接到顶点,

4

1 回答 1

3

这是一个标准的变换顺序问题解决方案是以正确的顺序应用转换。如果你想缩放然后偏移,那么就这样做。如果要偏移然后相对于新偏移进行缩放,请这样做。两者都不是“正确的”;这一切都取决于你想要什么。

对于您的情况,您需要先应用比例,然后再进行翻译。假设您正在与列主矩阵进行右乘,这意味着您最后提供比例。

于 2012-10-25T17:08:22.867 回答