将多个同时旋转应用于相同的数字

时间:2012-12-04 07:19:37

标签: c++ opengl 3d

我的应用程序中有一个简单的矩形形状,我正在旋转固定其一侧,并围绕X轴旋转。旋转看起来像下图(灰色表示我用这个数字得到的当前旋转)

enter image description here

我使用以下代码来获得此轮换

glPushMatrix();
glTranslatef(position of the axis point which has to be fixed for rotation);
glRotatef(rotationAmount, 1,0,0);
glTranslatef(-position of the axis point which has to be fixed for rotation);
Rectangle(xPosition, Position,200,100);
glPopMatrix();

然而,我必须围绕其一侧(图中的绿色箭头方向)围绕y轴旋转另一个旋转图。如何旋转此矩形使其在x轴和y轴周围保持旋转?

编辑: 我确实尝试添加另一个glRotatef(rotateAroundYaxis amount,0,1,0),但输出实际上并不像我期望的那样。该图在两个象限中旋转,而不是围绕y轴旋转,就像一个简单的翻页一样。

如果我在程序中只使用其中一个独立尝试这两个旋转(而不是两个一起),即

glRotatef(rotateAmount,1,0,0);
glRotatef(rotateYamount,0,-1,0);

我确实独立获得了所需的X和Y旋转,但是当它们在一起时,它会结合成一些奇怪的旋转效果。

2 个答案:

答案 0 :(得分:1)

听起来你只想要以下内容。如果你不请说,我会改变它。

glPushMatrix();
glTranslatef(position of the axis point which has to be fixed for rotation);
glRotatef(rotationAmount, 1,0,0); // <- keep this but also
glRotatef(rotationAmountAroundYAxis, 0,1,0); // <- add this
glTranslatef(-position of the axis point which has to be fixed for rotation);
Rectangle(xPosition, Position,200,100);
glPopMatrix();

答案 1 :(得分:0)

你需要改变这个:

glRotatef(rotationAmount, 1,0,0);

进入这个:

glRotatef(rotationAmount, 1,1,0);