俯仰偏转,角度独立

use*_*802 0 c++ opengl transformation angle jogl

我正在努力弄清楚如何使它们之间的俯仰偏转和滚动独立.一旦我在z轴上旋转一些东西(俯仰),第二次旋转(yaxis yaw)取决于第一次和第三次旋转(x轴,滚动)的结果取决于另外两次.因此,我没有独立的音高,偏航,滚动,而是将它们三者混合在一起,很难看.

我希望有可能将对象角度存储在数组[俯仰,偏航,滚动]中,然后在变换过程中解码这些角度,以便偏航将对象放在给定位置,然后它取出与音高对应的角度,但是不是两者的复合......

我见过对"任意轴旋转矩阵"的引用.获得理想的结果会有用吗??? 1)应用偏航(gl.glRotatef(beta,0.0f,1.0f,0.0f);)2)得到手动旋转矢量的结果轴(1.0f,0.0f,0.0f)arround beta 3)应用音高使用轴进入2 {和滚动...如果1,2,3是正确的} 4)旋转轴2进入其x轴进行滚动5)使用轴进入4进行滚动

会有用吗?更好的解决方案?我想保持我的对象局部方向为[俯仰,偏航,滚动]格式.

我已经挣扎了几天,如果可能的话我想避免使用四元数.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);
Run Code Online (Sandbox Code Playgroud)

Jep*_*sen 6

方向总是取决于角度顺序.你不能让他们独立.旋转矢量将它们乘以矩阵,矩阵乘法不是可交换的.您可以选择一个订单并与之保持一致.对于这些问题,常见的选择是ZYX定向方法(第一次滚动,然后是俯仰和最后的偏航).我在处理角度时的个人参考是这份文件,这对我有很大帮助.