2

我很难找出如何在不改变轴方向的情况下围绕两个轴旋转对象。我只需要局部旋转,首先围绕 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();

但这也会改变坐标系。

4

2 回答 2

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);
于 2012-01-13T14:58:49.143 回答
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
于 2010-05-24T17:31:07.600 回答