2

我很难找到如何在不改变轴方向的情况下旋转两个轴的对象。 我只需要局部旋转,首先围绕X轴,然后围绕Y轴(仅举例说明,不论变换整个坐标系,只围绕对象,围绕哪个轴进行多少次变换无关紧要)。 问题是,如果我使用glRotatef arround X轴,轴也旋转,这就是我不想要的。 我有一堆关于它的文章,但它似乎仍然缺少一些东西。 感谢您的帮助。OpenGL ES在固定坐标系统中旋转

要在这里有一些示例代码,它是这样的

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(rotX, 1.0f, 0.0f, 0.0f); 
glRotatef(rotY, 0.0f, 1.0f, 0.0f); 
drawObject(); 

但这也变换坐标系。

回答

0

您可能需要在绘制对象后恢复您的模型视图矩阵。您可以使用OpenGL的内置矩阵堆栈来完成此操作。常见模式如下所示:

// Set up global coordinate system: 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
// ... add world and view transformations here ... 

// Draw your object: 
glPushMatrix(); // save the current matrix on the stack 
glRotatef(rotX, 1.0f, 0.0f, 0.0f); 
glRotatef(rotY, 0.0f, 1.0f, 0.0f); 
drawObject(); 
glPopMatrix(); // restore the previously saved matrix 

// Repeat the above for other objects 
+0

谢谢你的建议,我已经试过这一点,但它没有工作,我认为这个问题是在某一步,我旋转角落找寻其旋转坐标系统,然后在相同的步骤X轴这个旋转是使用已经绕着X轴旋转的坐标系来完成的,所以它不是我所需要的。也许我之前解释过这个不好或不清楚。 或者你认为问题在别的地方? – Jenicek 2010-05-24 17:47:15

+0

啊,我明白了,所以你想围绕全球的Y轴旋转,而不是本地的Y轴。这不是表达旋转的常用方式,而且我不知道该怎么做。你可以尝试颠倒X和Y旋转的顺序,看看它是否对你的应用更有意义。 – Thomas 2010-05-24 18:43:22

+0

是的,你是对的。我知道这并不常见,我只是在尝试一些东西,而我在这一点上陷入了困境:)也许我会弄明白,我会尝试再次玩它:)感谢您的回复:) – Jenicek 2010-05-24 19:12:37

1

创建一个全局矩阵。旋转时将xAngle和yAngle添加到矩阵。

Matrix.rotateM(matrix, 0, xAngleADD, matrix[1], matrix[5], matrix[9]); 
Matrix.rotateM(matrix, 0, yAngleADD, matrix[0], matrix[4], matrix[8]); 
gl.glMultMatrixf(matrix, 0);