2012-12-17 178 views
2

我想使用此代码对定轴不断旋转球:旋转在OpenGL ES

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);,它的作品,并保持持续旋转,但是旋转不顺畅,它看起来像旋转开始时,我切换旋转轴以上。

+0

您是否尝试过使用loadidentity?在这里发布更多代码。 – Trax

回答

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。

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

希望有所帮助。

+0

是啊修好了,很久没用过固定管道了。 – Trax

+0

谢谢!是的,这确实帮助了很多。我能够使用轴和角度设置四元数,然后将其转换为矩阵,并使用glMultMatrixf()来转换模型视图矩阵。旋转现在保持连续。关于如何将二维操纵杆映射到四元数的轴角旋转,您有任何想法吗? – DRiFTy

+0

你的第一个近似值有什么问题? (使用操纵杆位移作为要应用的角度的“量”)。 – Trax