opengl中三角形的旋转

时间:2011-04-01 18:49:58

标签: opengl

我是opengl.I的新手。在按下时旋转我的三角形。我的三角形没有显示。可能是代码中必须有很多错误,请查看它并给出正确的建议。下面是旋转代码。

void keyboard(unsigned char key, int x, int y)
{


   switch (key) {

      case 'q':
         exit(0);
         break;

         case 'a':
             {

            glPushMatrix();
            glLoadIdentity();
            glTranslatef(0,0,0);
            glRotatef(90.0+rot, 0.0, 1.0, 0.0);
            glBegin(GL_TRIANGLES);        
                glVertex3f( 1.0, 1.0, 0.0 );        
                glVertex3f( 3.0, 2.0, 0.0 );        
                glVertex3f( 3.0, 1.0, 0.0 );        
              glEnd();
            glPopMatrix();

                rot+=1;

             }
         break;
   }
}

并且从MAIN FUNCTION这个函数通过下面的代码行调用。

...

glutKeyboardFunc(keyboard);

.......

2 个答案:

答案 0 :(得分:2)

首先,你的控制器代码应该只处理递增旋转

case 'a':
   rot += 1;
   break;

您的主要显示功能应该处理其他所有事情。可能发生的是你的实现正在旋转并显示三角形,然后主循环然后立即改变你的视图。

答案 1 :(得分:1)

如果你坚持使用过剩(不是一个好主意,IMO,但这就是生活)你通常想把所有的绘图代码放在一个地方,并传递(指针)该功能(或称之为功能) )到glutDisplayFunc。在键盘功能中,您只需执行以下操作:

rot+=1;
glutPostRedisplay();

glutPostRedisplay()表示消息(至少在概念上)发布到队列中,表示需要更新显示。基于此,您传递给glutDisplayFunc的任何函数都将被调用(虽然不一定立即)。

如果您已经完成了任何Windows API编程,那么这与通常的模式几乎相同:当您收到输入时,您会修改数据,并使Windows的矩形无效。为此,您将收到WM_PAINT消息,然后您的代码将更新显示。虽然细节不同,但您也可以看到与MacOS和X窗口系统类似的模式。