2

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

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

axisX = (axisX+1)%360;
axisY = (axisY+1)%360;

变量axisXaxisY现在都加一,这将使旋转沿对角线方向向右移动。物体旋转了大约 45 度,然后开始转动并开始以另一种方式旋转。我怎样才能让它在除了 x 和 y 之外的轴上连续旋转?

注意:我正在尝试连接一个虚拟操纵杆来控制axisXaxisY值并使球体在操纵杆所代表的轴上旋转。如果有人对此有任何建议,那也很好。

编辑: 我已经改变了它,如果我使用gl.glRotatef(angle, axisX, axisY, axisZ);它,它可以工作并保持旋转,但旋转不平滑,看起来当我切换旋转轴时旋转会重新开始。

4

1 回答 1

2
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。

另一种方法是使用四元数,然后将四元数转换为矩阵并将矩阵加载为当前的模型视图矩阵。

希望有帮助。

于 2012-12-18T07:01:43.593 回答