Java opengles中的旋转

Java opengles中的旋转,java,android,opengl-es,libgdx,Java,Android,Opengl Es,Libgdx,我尝试使用以下代码在给定轴上连续旋转球体: gl.glRotatef(axisX, 0, 1, 0); gl.glRotatef(axisY, 0, 0, 1); axisX = (axisX+1)%360; axisY = (axisY+1)%360; 变量axisX和axisY现在都增加1,这将使旋转沿对角线方向向右移动。对象旋转到大约45度,然后开始旋转,并以另一种方式开始旋转。我怎样才能让它在一个轴上连续旋转,而不仅仅是x轴和y轴 注意:我正在尝试连接一个虚拟操纵杆来控制axisX和

我尝试使用以下代码在给定轴上连续旋转球体:

gl.glRotatef(axisX, 0, 1, 0);
gl.glRotatef(axisY, 0, 0, 1);

axisX = (axisX+1)%360;
axisY = (axisY+1)%360;
变量
axisX
axisY
现在都增加1,这将使旋转沿对角线方向向右移动。对象旋转到大约45度,然后开始旋转,并以另一种方式开始旋转。我怎样才能让它在一个轴上连续旋转,而不仅仅是x轴和y轴

注意:我正在尝试连接一个虚拟操纵杆来控制
axisX
axisY
值,并使球体在操纵杆表示的轴上旋转。如果有人对此有什么建议,那也太好了

编辑: 我已经更改了它,如果我使用
gl.glRotatef(角度,axisX,axisY,axisZ)它工作并保持旋转,但旋转不平滑,当我切换旋转轴时,旋转似乎重新开始

glLoadIdentity(); // Reset rotation and give a new one
glRotatef(theta[0],1.0,0.0,0.0);
glRotatef(theta[1],0.0,1.0,0.0);
第一个参数是角度,然后是要围绕的轴

关于您的编辑:看起来您在这里混合了轴和角度。轴应为单位长度向量,角度从0到2*PI

另一种方法是使用四元数,然后将四元数转换为矩阵,并将矩阵作为当前modelview矩阵加载


希望有帮助。

是的,修复了,很久没有使用固定管道了。谢谢!是的,这确实很有帮助。我能够使用轴和角度设置四元数,然后将其转换为矩阵,并使用glMultMatrixf()转换modelview矩阵。旋转现在保持连续。你有没有想过如何将二维操纵杆映射到四元数的轴角旋转?你的第一个近似值有什么问题?(使用操纵杆位移作为要应用的角度的“量”)。现在我正在尝试将轴旋转值映射到操纵杆坐标的特定象限。因此,如果操纵杆指向右上角(第一象限),那么我将确定y轴和从原点到操纵杆位置形成的向量之间的角度。以确定旋转的角度。但是,一旦轴值发生变化,下一次旋转就不会围绕正确的轴旋转。是否尝试使用loadidentity?在这里发布更多代码。