从中心而不是从左、中旋转

Posted

技术标签:

【中文标题】从中心而不是从左、中旋转【英文标题】:Rotating from center rather than from left, middle 【发布时间】:2011-08-16 23:24:20 【问题描述】:

我正在开发一个骨骼动画系统,每个骨骼的角度都基于其父级。我必须从父关节的末端旋转该骨骼以使该角度准确,如本图的第一部分所示:

我需要做的是插图的第二部分。这是因为我的绘图 API 只支持围绕位图中心旋转。

谢谢

【问题讨论】:

我不确定我是否完全理解这一点,但是如果您想围绕特定点旋转,那么您可以通过 (-anchor.x, -anchor.y) 平移整个形状,然后旋转,然后通过 (anchor.x, anchor.y) 进行平移 【参考方案1】:

将旋转与平移相结合。围绕中心旋转图形,然后将其移动到应在的位置。

【讨论】:

翻译会是什么? 旋转后,您将向下平移图像宽度的一半。【参考方案2】:

一种选择是在位图中引入额外的空白像素。如果只能围绕位图的中心旋转,请考虑将位图的宽度加倍然后平移要旋转的图像使其与右侧齐平会发生什么。

例如,假设你的图片是

+-------+
X image |
+-------+

X 是您要旋转的点。现在,构建这个图像:

+-------+-------+
| blank X image |
+-------+-------+

如果您围绕此图像的中心旋转,请注意您是在 X 的正上方旋转,这是您最初想要做的。生成的旋转图像如下所示:

+---+
| b |
| l |
| a |
| n |
| k |
+-X-+
| i |
| m |
| a |
| g |
| e |
+---+

现在,您只需提取图像的下半部分即可获得原始图像,围绕指示的 X 点旋转 90 度。

希望这会有所帮助!

【讨论】:

以上是关于从中心而不是从左、中旋转的主要内容,如果未能解决你的问题,请参考以下文章

从顶部裁剪,而不是从中心裁剪

如何在three.js对象渲染中从中心向左更改轴(x,y,z)位置?

在节点的右边缘而不是在中心旋转 SKSpriteNode

Android,围绕自我中心旋转位图而不缩放它

如何在 OpenGL 中更改旋转中心

围绕其中心点旋转自定义几何网格