我有一个输入设备,它给了我 3 个角度——围绕 x、y、z 轴旋转。
现在我需要使用这些角度来旋转 3D 空间,没有万向节锁定。我以为我可以转换为四元数,但显然因为我以 3 个角度获取数据,这无济于事吗?
如果是这种情况,我该如何正确旋转空间,请记住我的输入数据只是 x、y、z 轴旋转角度,所以我不能只是“避免”它。同样,围绕轴旋转的顺序移动也无济于事——无论如何,所有轴都将被使用,因此改变顺序不会完成任何事情。但肯定有办法做到这一点吗?
如果有帮助,问题几乎可以归结为实现此功能:
void generateVectorsFromAngles(double &lastXRotation,
double &lastYRotation,
double &lastZRotation,
JD::Vector &up,
JD::Vector &viewing) {
JD::Vector yaxis = JD::Vector(0,0,1);
JD::Vector zaxis = JD::Vector(0,1,0);
JD::Vector xaxis = JD::Vector(1,0,0);
up.rotate(xaxis, lastXRotation);
up.rotate(yaxis, lastYRotation);
up.rotate(zaxis, lastZRotation);
viewing.rotate(xaxis, lastXRotation);
viewing.rotate(yaxis, lastYRotation);
viewing.rotate(zaxis, lastZRotation);
}
以一种避免万向节锁定的方式。