【问题标题】:Pitch Yaw Roll accumulation openglPitch Yaw Roll 累积 opengl
【发布时间】:2019-06-19 03:33:54
【问题描述】:

我正在尝试实现 yaw pitch roll 用于可视化相机 yaw pitch roll 超过 360 度,例如在 Maya、Blender、Unreal Engine、Unity 等中。所有这些应用程序都可以在 gui 中显示超过 360 度的角度并且没有任何云台锁定问题。

当前psevdo代码;

Quaternion rotation; //relative (local rotation)
Quaternion parentRotation;
    //it is psevdo code where we calculate delta angle that user generate on current frame by mouse
void SetDeltaWorldRotationFromUserInput(Quaternion value)
{
    SetWorldRotation(value);
}

void SetWorldRotation(Quaternion value)
{
    SetLocalRotation(parentQuaternion.inverted() * value); //get/set local rotation
}

void SetLocalRotation(Quaternion value)
{
    rotation = value; //this we save new local rotation but i want to save somehow more then 360 degree 
    auto eulersForGui = value.toEulers(); //it is current eulers but i want to accumulate and show in gui accumulate rotation. like currentRotation + delta or somehow

    auto deltaEulers = (value * rotation.inverted()).toEulers(); //i can get delta eulers but i can't add it to euelers and don't know what i need to do with this value

}

【问题讨论】:

  • 正如您的问题标题所示,累积角度,而不是四元数 - 您可以在角度更新时重新计算四元数。
  • 我围绕枢轴旋转对象,然后重新计算它的位置,通过反转括号四元数将其与父级关联,之后我失去了原始角度,无论如何欧拉不能最简单地添加到最后一个欧拉
  • 不明白你的意思;如果可以存储角度,为什么还需要重新计算角度?使用累积的角度计算局部四元数并与父四元数相乘得到全局变换。
  • 我不知道如何积累欧拉。我知道我不能简单地将偏航添加到偏航。你能以某种方式解释它。还是谢谢你的回答
  • 可以直接根据鼠标移动来累积角度 - 每个游戏/CAD 软件都是这样做的,但是您不能通过添加它们来组合欧拉角变换;这是两个不同的概念。

标签: c++ opengl camera rotation trigonometry


【解决方案1】:

我在评论部分留下了您问题的链接。但是,作为对您问题的快速回答,我认为该网页上的这句话应该为您指明正确的方向:

“旋转序列可以用一系列四元数相乘来表示,产生一个对组合旋转进行编码的结果四元数。”

上面的引用可以指多个四元数,每个四元数围绕不同的轴旋转以获得 3D 组合旋转,或者围绕同一轴的多次旋转将累积到超过 360 度的单个旋转。

【讨论】:

  • 是的,多重矩阵或四元数可以旋转超过 360,但之后你会得到结果矩阵或四元数,然后 Maya 等如何以 gui 角度显示超过 360?在任何乘法操作之后,您会丢失有关有多少用户旋转对象 720 或更多的信息
  • @IgorShumakov 没有任何代码来查看您尝试过的内容很难准确地说出,但如果您有当前的位置和方向,您可以创建一个临时副本。然后使用该副本对新位置进行转换。然后您可能需要另一个变量,例如基本的floatdoubleint 等,它将更新并代表您的实际旋转值。请记住,您的三角函数 sincos 是循环函数。
  • 是的,你是对的。我添加了代码。似乎没有人理解我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2013-06-02
  • 2013-12-25
  • 1970-01-01
  • 2018-11-19
  • 2012-02-26
相关资源
最近更新 更多