【问题标题】:Easy rotation in 3D with mouse in Flash rotationXYZ in 2 directions用鼠标在 Flash 中轻松旋转 3D 旋转 XYZ 在 2 个方向
【发布时间】:2011-01-05 09:56:37
【问题描述】:

我有一个立方体,我想使用鼠标移动来旋转它。因此,如果我将鼠标向左移动,它会旋转,就好像rotationX 增加了一样。当我向右移动时,rotationX 会增加。上下移动会改变旋转 Y。

只要您只修改一个维度(rotationX 或 rotationY),这看起来很好。但是如果我已经更改了 rotationX 然后尝试修改 rotationY 结果很奇怪。如果rotationX 为180,则rotationY 效果会反转。它基本上是非常不可预测的,当然不适合用户。

我试图环顾四周(失败),阅读有关四元数的内容(无法理解),尝试了一些非常复杂的三角函数计算(把自己弄傻了),所以我现在被困住了。我发现了这个 SO 问题 Best way to translate mouse drag motion into 3d rotation of an object 但这对我没有一点帮助,我真的无法理解任何答案。

AS3 中一个完整的、有效的解决方案/算法将是最好的,但我们将非常感谢一些伪代码或只是清晰的解释。

【问题讨论】:

    标签: flash actionscript-3 3d rotation


    【解决方案1】:

    您正在将 rotationY 应用于已旋转的对象。因此,如果您将rotationX 设置为180,然后设置rotationY,您实际上是在旋转“在其头上”站立的对象。如果要同时应用 x 和 y 旋转,最好使用matrix。您提供的链接很有用:一旦您理解了矩阵的概念,它就会解释一切。您应该阅读此内容,尤其是如果您打算在未来做更多的 3D。

    现在,看看Flash manual page for Matrix3D。它应该提供您开始工作所需的所有信息和示例。

    【讨论】:

    • 是的,我意识到这就是原因,我只是很难给自己措辞。我或多或少地知道矩阵在理论上是如何工作的,在学校就有过,但我不能真正掌握实际的实现。不过会用这个 Matrix3D 再试一次,希望这次我能弄明白。
    • 哇! 完全震惊我不敢相信这很容易。而且我不敢相信我以前没有尝试过,从未注意到这种可能性。原来你只需要 Matrix3D.appendRotation()。我猜想当我第一次尝试它时,我假设修改 rotationXYZ 只是,有点,别名这个函数。再次感谢您向我指出这一点:D。
    • 这样想。当您更改rotationX 时,您将围绕它自己的 x 轴旋转对象。您来这里寻找的是一种围绕 world x 轴旋转对象的方法,而不管对象的 x 轴在哪里。这相当于您需要在对象的当前旋转上附加一个旋转,这就是为什么 appendRotation 可以满足您的需求,而修改参数却没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多