OpenGL ES在固定坐标系中旋转

时间:2010-05-24 17:27:22

标签: opengl-es rotation transform transformation coordinate-systems

我在找到如何在不改变轴方向的情况下围绕两个轴旋转对象时遇到了麻烦。 我只需要局部旋转,第一个圆周X轴,然后是圆周Y轴(仅举例,无论多少转换围绕哪个轴),而不转换整个坐标系,只需要对象。 问题是,如果我使用glRotatef arround X轴,轴也会旋转,这就是我不想要的。 我有很多关于它的文章,但似乎我仍然缺少一些东西。 感谢您的帮助。

这里有一些示例代码,就像这样

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

但这也改变了坐标系。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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