【问题标题】:Obtaining the camera rotation in radians on the X, Y, and Z axis in OpenGL?在 OpenGL 中获取相机在 X、Y 和 Z 轴上的弧度旋转?
【发布时间】:2010-11-02 20:40:01
【问题描述】:

我正在尝试在 OpenGL 中获取各个轴上的相机旋转(但专门使用 Java、LWJGL 和 jME)。相机对象允许我将方向作为 Vector3f,但这似乎无法获得组件化的旋转;每个轴似乎都与另一个轴相关联。我发现带有偏移角度分量的 toAngleAxis 是一种快速破解方法,但在大多数情况下无法正常工作。不幸的是,我的数学不太好,否则我可能能够解决这个问题 :) 同样,我只需要将 X、Y 和 Z 轴分量化并以弧度表示,从 0 弧度到 2 PI 弧度。

谁能帮忙?

提前干杯和感谢, 克里斯

【问题讨论】:

    标签: java opengl 3d rotation jmonkeyengine


    【解决方案1】:

    我建议阅读有关欧拉角、偏航/俯仰/滚动和四元数方向的信息。这些主题将帮助您了解所涉及的所有内容。如果我理解正确,您是在尝试从指定方向构造欧拉角。

    查看code for some algorithms 了解如何使用欧拉角。特别是,我相信您想要的是 setDirection 方法。

    这将为您提供来自方向矢量的偏航和俯仰。但请注意,您只需要 2 次旋转,因为“滚动”需要围绕方向矢量(或您的方向指定为单个四元数旋转)进行旋转。

    【讨论】:

    • 很遗憾,我不能使用 setRotation 方法——还有其他系统作用于相机,我需要转换持有的相机旋转。此外,这些系统只是简单地做一些事情,比如将相机的前向矢量相乘以使其向前移动,等等。
    • 我指出 setRotation() 是因为它会执行您需要的实际数学运算 - 它从特定向量(旋转)为您提供如何获得俯仰和偏航(创建它的 2 个旋转) .无需实际“设置”旋转 - 这只是为您提供了一种发现旋转到位的方法。
    【解决方案2】:

    获得旋转角度只需将笛卡尔坐标中给出的视图向量转换为球坐标。你可以在wikipedia找到公式。

    viewvector = <x, y, z>
    
    r = sqrt(x² + y² + z²)
    phi = arctan2(y, x)
    theta = arccos(z / r)
    

    请注意,您只能从视图向量中获得两个旋转角度。获得第三个旋转角度需要知道投影平面x或y轴。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多