我正在尝试为可视化相机实现超过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
}
答案 0 :(得分:0)
我在评论部分留下了指向您问题的链接。但是,作为对您的问题的快速解答,我认为该网页上的这句话应该为您指明正确的方向:
“旋转序列可以用一系列四元数相乘来表示,产生一个生成的四元数,该四元数对组合后的旋转进行编码。”
上面的引用可以指多个四元数,每个四元数围绕一个不同的轴旋转以获得3D组合旋转,或者围绕同一轴的多个旋转累积到单个旋转的360度以上。