改变矩阵变换的变换原点

3

我有一个包含旋转和平移变换的System.Drawing.Drawing2D.Matrix,我需要将其应用到一个精灵上。不幸的是,旋转的原点在精灵的左上角。

如何将旋转原点更改为精灵的中心?

3个回答

3

目前你的变换矩阵包括一个旋转(原点在左上角),乘以一个平移(从原始左上角到新的左上角)。

要更改旋转的原点,您需要先进行另一次平移:

将 (-宽度的一半,-高度的一半) 平移以使对象居中
然后进行旋转(现在以精灵的中心为中心)
最后进行最终平移(加上第一步中减去的一半宽度和一半高度)。


2

https://github.com/SFML/SFML/blob/master/src/SFML/Graphics/Transformable.cpp#L181 在事后设置了原点。您能解释一下如何实现吗? - Post Self

0

很遗憾,所有提出的解决方案对我都不起作用。它们似乎是好的解决方案,可能在其他情况下会起作用,但在我的情况下不行。

然而,我找到了一个可行的解决方案:
我已经将矩阵的OffsetX和OffsetY字段的值更改为以下内容:

OffsetX = OffsetX - M11 * hx - M21 * hy + hx;
OffsetY = OffsetY - M12 * hx - M11 * hy + hy;

其中hx代表精灵的一半宽度,hy代表精灵的一半高度,M11、M12和M21是对应的矩阵字段。


嗨,graycrow, 我也遇到了同样的问题。当我应用变换时,所有的图形都出现在左上角。 如果我正确设置原点,它就会正确显示。 如何设置原点呢? 我有左、上、下和右四个图形对象。请问您能告诉我如何做吗? - Umesha MS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接