【发布时间】: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