【问题标题】:Rotation matrix from normal vector, warping around the poles来自法线向量的旋转矩阵,绕两极弯曲
【发布时间】:2013-11-12 05:04:50
【问题描述】:

我有一个需要围绕一个物体进行局部环绕的相机。该对象具有任意旋转,由法线向量描述。想象一个球形行星,有一个相机俯视该行星上的某个三角形。

我目前的实现是使用经典的向量交叉方法从三角形的法线生成一个旋转矩阵,然后使用该矩阵作为标准轨道相机的基础。这在地球赤道附近工作得很好,但是一旦它靠近两极,它就会开始爆炸,随着相机越接近极点的中心,它的行为就会越来越不规律。

我已经确定这是由于第一个矢量交叉,因为在这种情况下两个矢量彼此接近 - 我不确定这种现象的技术名称是什么。如果第一个向量是 0,1,0,当法线接近 0,1,0 或 0,-1,0 时会发生疯狂。

我找到了很多关于这个问题的描述,但没有有效的解决方案。我最接近的是这里:http://xboxforums.create.msdn.com/forums/p/13278/13278.aspx 它提到要处理“奇点”,在检测到它时使用不同的向量。我可以很容易地确定相机何时在行星面上会导致这种情况发生(因为我的行星球体是从投影到球坐标的 6 个四叉树生成的),但是当我切换到新矢量时会出现非常明显的快照。

这是当前代码:

Vector3 triNormal; //the current normal of the target vertex
Vector3 origin = Vector3.Forward;
Matrix orientation.Forward = origin;

orientation.Up = triNormal;
orientation.Right = Vector3.Cross(orientation.Up, orientation.Forward);
orientation.Right.Normalize();
orientation.Forward = Vector3.Cross(orientation.Right, orientation.Up);
orientation.Forward.Normalize();

我已经尝试检测 triNormal 何时位于其中一个极面上,并将 'origin' 设置为其他值,例如 Right。相机一旦在脸部上就会正常运行,但会在它越过时立即捕捉到新的旋转。这是有道理的,因为它的参考向量刚刚改变,但需要消除以获得流畅的用户体验。我试图弄清楚如何抵消轨道相机的相机偏航以抵消新的坐标系,但它似乎不是一个恒定值,具体取决于相机当前瞄准的球体上的位置。我不确定如何计算差异。

还要注意,由于它在 XNA 和 C# 中,我使用的是右手坐标系。

【问题讨论】:

    标签: c# math vector matrix xna


    【解决方案1】:

    我不明白你为什么这样做:

    orientation.Forward = Vector3.Cross(orientation.Right, orientation.Up);
    orientation.Forward.Normalize();
    

    当您已经使用之前的orientation.Forward 来获取orientation.Right
    (如果您“跨越”法线向量,我认为您不需要对它们进行归一化。)

    不管怎样,如果triNormal是目标顶点的当前法线,而你的相机正往下看,我想你应该有:

    orientation.Forward = -triNormal
    

    【讨论】:

    • 规范化可能是不必要的;这更像是一种健全性检查,以确保这不可能是问题所在。采取第二个十字架似乎并没有太大影响。它存在是因为它存在于我见过的用于从旋转生成旋转矩阵的所有其他算法中——我还没有找到一个关于它到底做了什么的体面的解释。将前向向量设置为 -triNormal 不起作用。如果我将其保留在其中,并将 Up 向量设置为 +triNormal,则该矩阵似乎无效,因为它不显示任何内容。如果它是唯一设置的,则相同。
    • 当然,如果你设置了Forward = -triNormal,你就不能离开Up = triNormal,但我不知道其他的正常情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多