Opengl 如何指定键盘';s方向键在glut中?

Opengl 如何指定键盘';s方向键在glut中?,opengl,glut,Opengl,Glut,我想使用up、down、left、right作为opengl+glut应用程序控件的一部分。如何引用我的“键盘”函数(我传递给glutKeyboardFunc)中的键 你需要 例如— #include<GL/gl.h> #include<GL/glut.h> #include<stdio.h> void init(void) { /*initialize the x-y co-ordinate*/ glClearColor(0,0,0,0);

我想使用up、down、left、right作为opengl+glut应用程序控件的一部分。如何引用我的“
键盘
”函数(我传递给
glutKeyboardFunc
)中的键

你需要

例如—

#include<GL/gl.h>
#include<GL/glut.h>
#include<stdio.h>

void
init(void)
{
    /*initialize the x-y co-ordinate*/
    glClearColor(0,0,0,0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-320, 319,-240, 239);
    glClear (GL_COLOR_BUFFER_BIT);

    glFlush();
}

void
catchKey(int key, int x, int y)
{
    if(key == GLUT_KEY_LEFT)    
        printf("Left key is pressed\n");
    else if(key == GLUT_KEY_RIGHT)
        printf("Right key is pressed\n");
    else if(key == GLUT_KEY_DOWN)
        printf("Down key is pressed\n");
    else if(key == GLUT_KEY_UP)
        printf("Up key is pressed\n");
}

int
main(int argc, char *argv[])
{
    double x_0, y_0, x_1, y_1;
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(640, 480);
    glutInitWindowPosition(400, 400);

    glutCreateWindow("Special key");
    init();
    glutSpecialFunc(catchKey);
    glutMainLoop();
}
#包括
#包括
#包括
无效的
初始(无效)
{
/*初始化x-y坐标*/
glClearColor(0,0,0,0);
glMatrixMode(GL_投影);
glLoadIdentity();
gluOrtho2D(-320319,-240239);
glClear(GLU颜色缓冲位);
glFlush();
}
无效的
catchKey(整数键、整数x、整数y)
{
if(key==GLUT\u key\u LEFT)
printf(“按下左键\n”);
else if(key==GLUT\u key\u RIGHT)
printf(“按下右键\n”);
else if(key==GLUT\u key\u DOWN)
printf(“按下向下键\n”);
else if(key==GLUT\u key\u UP)
printf(“按下向上键\n”);
}
int
main(int argc,char*argv[])
{
双x_0,y_0,x_1,y_1;
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
GLUTINITWindowsSize(640480);
位置(400400);
创建窗口(“特殊键”);
init();
glutSpecialFunc(catchKey);
glutMainLoop();
}

您的函数应该是这样的

void handleSpecialKeypress(int key, int x, int y) {
 switch (key) {
 case GLUT_KEY_LEFT:
  isLeftKeyPressed = true;
  if (!isRightKeyPressed) {
        DO SOMETHING HERE;
  }
  break;
 case GLUT_KEY_RIGHT:
  isRightKeyPressed = true;
  if (!isLeftKeyPressed) {
        DO SOMETHING HERE;
  }
  break;
 }
}

void handleSpecialKeyReleased(int key, int x, int y) {
 switch (key) {
 case GLUT_KEY_LEFT:
  isLeftKeyPressed = false;
  break;
 case GLUT_KEY_RIGHT:
  isRightKeyPressed = false;
  break;
 }
}
您还需要在main()方法中调用这些函数

  • 变量isRightKeyPressedisLeftKeyPressed是我定义的全局变量
 glutSpecialFunc(handleSpecialKeypress);
 glutSpecialUpFunc(handleSpecialKeyReleased);