我正在努力弄清楚如何使俯仰偏航和滚动在它们之间独立。一旦我在 z 轴(俯仰)上旋转某些东西,第二次旋转(yaxis yaw)取决于第一次旋转的结果,第三次旋转(x 轴,滚动)取决于其他两个旋转的结果。因此,我没有独立的俯仰、偏航、滚动,而是将它们三个混合在一起,很难看。
我希望可以将对象角度存储在数组 [pitch,yaw,roll] 中,然后在转换过程中解码这些角度,以便偏航将对象置于给定位置,然后采用与俯仰相对应的角度,但是不是两者的复合...
我已经看到对“任意轴旋转矩阵”的引用。得到想要的结果会有用吗???1) 应用偏航 (gl.glRotatef(beta, 0.0f, 1.0f, 0.0f);) 2) 获得手动旋转矢量 (1.0f,0.0f,0.0f) 围绕 beta 的结果轴 3) 应用俯仰使用轴进入 2 {和滚动...如果 1,2,3 是正确的} 4)旋转进入 2 的轴围绕其 x 滚动 5)使用进入 4 的轴应用滚动
它会起作用吗?有更好的解决方案吗?我想将我的对象本地方向保持为 [pitch,yaw,roll] 格式。
我已经为此苦苦挣扎了好几天,如果可能的话,我想避免使用四元数。3D 对象存储在相对于 0,0,0 并沿 {1,0,0} 观察并转换到它们的目的地和角度的每一帧,因此应该很容易避免云台锁定问题。
换句话说,我的相机工作正常,世界坐标正在正确制作,但我不知道应该如何或在何处应用基于偏航、髓、滚动的对象局部变换。
结果应从数组 [y,p,r] 中读取,它们的组合不应重叠。
其实我的转变是:
gl.glLoadIdentity();
float[] scalation = transform.getScalation();
gl.glScalef(scalation[0], scalation[1], scalation[2]);
float[] translation = transform.getTranslation();
gl.glTranslatef(translation[0], translation[1], translation[2]);
float[] rotation = transform.getRotation();
gl.glRotatef(rotation[0], 1.0f, 0.0f, 0.0f);
gl.glRotatef(rotation[1], 0.0f, 1.0f, 0.0f);
gl.glRotatef(rotation[2], 0.0f, 0.0f, 1.0f);