我想在opengl中使用欧拉角。有些人建议如下:
glRotatef(Rx,1,0,0);
glRotatef(Rx,0,1,0);
glRotatef(Rx,0,0,1);
当然,如果您一次向多个方向旋转,则此方法将完全崩溃。据我所知,更好的方法是将所有内容转换为 OpenGL 期望的格式(角度和矢量)
四元数的欧拉角在互联网上的许多不同地方都有相当广泛的覆盖。不幸的是,互联网上的每个帖子似乎都有不同的建议,而对于我的生活来说,它们似乎都不起作用。很有可能有一个可行的建议,但在一长串不太可行的建议中,我却忽略了它。
遵循这个建议让我很接近。旋转在单独的方向上起作用,但当它们组合起来时,它们似乎表现不正常。目前我的代码如下所示:
double c1 = cos((Rx/180.0f*3.141592)/2.0f);
double c2 = cos((Ry/180.0f*3.141592)/2.0f);
double c3 = cos((Rz/180.0f*3.141592)/2.0f);
double s1 = sin((Rx/180.0f*3.141592)/2.0f);
double s2 = sin((Ry/180.0f*3.141592)/2.0f);
double s3 = sin((Rz/180.0f*3.141592)/2.0f);
double x = (s1*c2*c3-c1*s2*s3)*180.0/3.141592;
double y = (c1*s2*c3+s1*c2*s3)*180.0/3.141592;
double z = (c1*c2*s3-s1*s2*c3)*180.0/3.141592;
double w = acos(c1*c2*c3+s1*s2*s3)*2.0*180.0/3.141592;
//normalize vector, maybe not necessary?
double mag = sqrt(x*x+y*y+z*z);
x /= mag;
y /= mag;
z /= mag;
glRotatef(w,x,y,z);
任何人都可以就从这里去哪里提供任何建议吗?