在opengl中旋转立方体的问题

我试图做一个简单的3d俄罗斯方块游戏,但我无法旋转我的块。 块由4个立方体(用glutSolidCube()绘制)组成。 我不知道如何旋转它们,仍然有轴指向正方向的立方体的运动。

这是我试过的最简单的forms,当我运行它时,清楚地说明了问题

for(int i=0; i<4; i++){ glPushMatrix(); glRotatef(90.0, 1,0,0); glTranslatef(cubes[i]->xPos, cubes[i]->yPos, cubes[i]->zPos); cubes[i]->draw(); glPopMatrix(); } 

这不仅是旋转块,而是旋转整个系统,现在,块向右旋转,但是从侧面而不是顶部移动,就好像轴已经旋转一样。 我已经尝试了第一个翻译到他们开始下降,旋转和翻译回来的地步,但他们仍然只是侧身。 (不包括在样本中,因为这里的起始位置不是主要问题)

我有点理解为什么发生这种情况,但我不知道如何解决这个问题。

你没有显示的是如何应用立方体的翻译。 从你对效果的描述来看,它是旋转之后发生的; 所以你要么翻译->draw()或更新yPos等坐标。 你的问题的“graphics”修复是 glRotate 之前应用掉落的运动。

但是 ,这会让你自己面临更大的问题。 你最终会想要碰撞你的立方体与其余的对象,以便知道何时停止它们,并删除行等旋转的渲染是不足以处理的。

因此,你将要自己计算旋转,而不是委托给OpenGL。 我的建议是实际改变立方体的configuration – 即根据旋转改变xPosyPoszPos 。 既然你只做了90°的旋转,这个特别简单。 这意味着你的碰撞testing不必考虑旋转。

(如果这似乎不是一个合适的答案,那么请更新你的问题,详细说明你是如何animation的下降。)