Opengl 分解GLF
我有函数glRotatef和这些参数Opengl 分解GLF,opengl,glrotate,Opengl,Glrotate,我有函数glRotatef和这些参数 glRotatef(-119.718,-0.58064,-0.575698,-0.575699); 如果我这样做 glRotatef(-119.718,-0.58064,0.0,0.0); glRotatef(-119.718,0.0,-0.575698,0.0); glRotatef(-119.718,0.0,0.0,-0.575699); 我没有得到与使用上述方法相同的旋转。那么,如何从中得到每个元素(x,y,z)的旋转呢 glRotatef(-11
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
如果我这样做
glRotatef(-119.718,-0.58064,0.0,0.0);
glRotatef(-119.718,0.0,-0.575698,0.0);
glRotatef(-119.718,0.0,0.0,-0.575699);
我没有得到与使用上述方法相同的旋转。那么,如何从中得到每个元素(x,y,z)的旋转呢
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
glLoadIdentity()代码>
glRotatef(-119.718,-0.58064,-0.575698,-0.575699)旋转矩阵代码>
glGetDoublev
double m[16];
glMatrixMode(GLU模型视图);
glPushMatrix();
glLoadIdentity();
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
glGetDoublev(GLU模型视图矩阵,m);
glPopMatrix();
最后一个项目取决于你的欧拉角顺序和坐标系符号,这是一个纯数学。。。因此,要么自己推导公式(atan2
和acos
是你的朋友),要么谷歌:
extracting euler angles from rotation matrix
找到一个和你的订单相匹配的点击率。。。要实现它,您还需要了解这些内容,因此请参见我的:
glRotate
是如何工作的。简言之,它围绕点(0,0,0)
和任意三维矢量作为轴旋转。请参见上一链接中的罗德里格斯旋转公式,但它也可以通过利用交叉和点积以及使用轴对齐旋转来实现
现在回到你的问题,在你获得欧拉角(假设顺序为ax,ay,az)之后,旋转本身看起来是这样的:
glRotatef(ax,1.0,0.0,0.0);
glRotatef(ay,0.0,1.0,0.0);
glRotatef(az,0.0,0.0,1.0);
必须按照与欧拉角相同的顺序进行…您确定要这样做吗?还是你需要?将一个方向分解为3个轴向旋转(又名:欧拉角)通常是一个糟糕设计的标志。好吧,我想要的是从第一个函数中得到,将它们传递到第二个形式的角度。我知道你想要什么。我是说你不应该那样。你想要这些角度来做点什么;我是说,你试图用这些角度来做的事情,可以用另一种不涉及这些角度的方法来更好地实现。我不怀疑还有其他的方法。但我需要这样做。这个问题是一个数学问题,而不是程序员的问题。读一读。好朋友,它工作得很好!非常感谢你的帮助和时间。