【问题标题】:3D rotation dilemma3D旋转困境
【发布时间】:2012-01-10 21:19:04
【问题描述】:

好的,希望我能以全面的方式解释这一点......如果我把你彻底搞糊涂了,请原谅我......

我正在使用一个旧的烦人的引擎,它只使用局部空间将旋转矩阵应用于对象。

我有一个文本工具,允许用户(非程序员)创建对象并旋转它们(更改不会实时应用)。

如果只围绕 1 个轴旋转,旋转会很好,但是当他们指定围绕 2 个轴旋转(例如围绕 UP 和 RIGHT 旋转)时,当然会变得歪斜,因为围绕 UP 的旋转是使用本地应用的UP 而不是全球(即世界)UP。

例如,假设我们有一个相机 (0,0,0) 正在观察平面 (0,-5,0) 的宽边。该工具的用户想要将该平面围绕它的 X(RIGHT)旋转 45 度,并将全局 UP 旋转 45 度。好吧,我无法让他们简单地指定 2 个旋转值并获得他们想要的关于全局 UP 的旋转......他们需要通过反复试验,指定关于 FORWARD 的旋转(在这种情况下为 Y)为了保持物体“直立”。

我想知道的是:我如何将围绕 2 轴的旋转转换为围绕 3 轴的旋转,假设围绕 UP 的旋转是全局 UP,并且仍然达到用户设想的旋转。

【问题讨论】:

  • 我假设像 (east,north,up) 这样 (0,0,-5) 是原点以下五个单位,并且您的相机正在向下看它。在这一点上,我不明白你的轮换,但告诉我这是否是你想要的。您首先要将平面的北端向上倾斜 45 度,然后围绕旧的向上轴(不是当前平面的法线)旋转平面?
  • 抱歉,我的飞机位置有误,我已经更正了。飞机将直接在相机前面,相机没有旋转。飞机的法线朝向相机。在示例中,用户希望将平面的顶部倾斜远离相机,并围绕全局 UP(在本例中为 0,0,1)旋转它。
  • 以相反的顺序旋转它们。连续旋转 2 次,一个始终在本地端,另一个始终在全局端。因此,如果您当前使用的那个在错误的一侧,请改用另一个。
  • 你知道,我想过这个问题,但由于某种原因,我认为问题在于引擎如何应用旋转而忽略了它。但是,是的,这确实有效。谢谢。

标签: 3d rotation linear-algebra


【解决方案1】:

每个对象的局部坐标系都固定在它上面,因此,一旦您将对象的局部轴旋转离开全局轴,围绕全局轴的旋转(比如全局向上)就变成了相对于局部轴的任意旋转轴。

因此,如果您想允许用户围绕全局向上旋转,您需要找出围绕对象局部轴的旋转/平移的正确组合。

谷歌搜索rotation about arbitrary axis 得到了这个链接:

http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/

【讨论】:

  • 所以为了清楚起见-您的提议将允许用户仅指定 2 个旋转(例如 X 和 Z 旋转),然后采用这 2 个值并构建一个旋转矩阵对于围绕所有 3 个局部轴的旋转,是否具有正确的旋转值??
  • 或多或少。我认为您必须解决的问题是给定一个任意轴(任何轴,但特别是全局向上)当您知道该任意轴相对于固定坐标系的分量时,如何围绕该轴旋转对象(您的本地坐标系)。
  • 是的,有道理...我会朝那个方向发展。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多