- 创建单位矩阵
glLoadIdentity();
- 将矩阵旋转
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
- 通过以下方式将矩阵获取到 CPU 端代码
glGetDoublev
- 使用三角函数计算欧拉角,以便您需要
所以前3个子弹很简单......
double m[16];
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
glGetDoublev(GL_MODELVIEW_MATRIX,m);
glPopMatrix();
最后一个项目符号取决于你的欧拉角顺序和坐标系符号及其纯数学......所以要么推导出你自己(atan2
并且acos
是你的朋友)或谷歌的方程:
extracting euler angles from rotation matrix
并找到与您的订单匹配的命中...要实施它,您还需要了解这些内容,所以请参阅我的:
同样从 OP 我觉得你不明白它是如何glRotate
工作的。简而言之,它围绕点(0,0,0)
和任意 3D 矢量作为轴旋转。请参阅上一个链接中的Rodrigues_rotation_formula,但它也可以通过利用交叉和点积以及使用轴对齐旋转来实现。
现在在获得欧拉角(假设 order 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);
并且必须按照与欧拉角相同的顺序完成......