OpenGL键盘事件不起作用

时间:2014-04-06 08:15:26

标签: opengl keyboard

我有以下代码段:

float z, yrot = 0, xrot = 0;
float x = 0.0;
float y = 0.0;

void display()                                                  /* 2. */
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);         /* 3. */

glMatrixMode(GL_MODELVIEW_MATRIX);
glLoadIdentity();

glMatrixMode   (GL_MODELVIEW);
glTranslatef(x, y, -0.5);
glRotatef(rotation, 0, 0, -1);
glColor3f(1.0,1.0,1.0);
glutWireTeapot(0.2);


glutSwapBuffers();                                          /* 4. */
}

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

     float yrotrad = (yrot / (180 * 3.141592654f));
     float xrotrad = (xrot / (180 * 3.141592654f));

     switch (key)
     {

         case 'w':

            x += (float)(sin(yrotrad));
            z -= (float)(cos(yrotrad)) ;
            y -= (float)(sin(xrotrad));
            glutPostRedisplay();
            break;
     }
}

int main(int argc, char **argv)                                 /* 5. */
{
    glutDisplayFunc(display);
    glutKeyboardFunc(keyPressed);
    glutMainLoop();
}

w 键时应该发生的事情是它应该倾斜相机。但是当我按 w 时,没有任何反应。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的xy参数会影响全局变量:

void keyPressed(unsigned char key, int x, int y)

所以那些增量并没有按照你的想法去做。打开你的编译器警告 - 你可能会看到一些关于失去精确度的信息。

具有讽刺意味的是,它适用于z,但您似乎并未在渲染代码中的任何位置使用它。

(旁白:您可能还想查看GLFW。它与GLUT非常相似,并且很容易上手,但在各个方面都更好。)