2010-11-22 14 views
5

मैं ओपनग्ल + ग्लूट एप्लिकेशन के नियंत्रण के हिस्से के रूप में ऊपर, नीचे, बाएं, दाएं का उपयोग करना चाहता हूं। मैं अपने 'keyboard' फ़ंक्शन के अंदर की चाबियों का उल्लेख कैसे करूं (जिसे मैं glutKeyboardFunc पर पास करता हूं)?मैं ग्लूट में कीबोर्ड की दिशात्मक कुंजी कैसे निर्दिष्ट करूं?

उत्तर

4

आपको glutSpecialFunc की आवश्यकता है।

उदाहरण के लिए -

#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(); 
} 
4

अपने कार्यों इन

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() प्रणाली में इन आह्वान करने के लिए की जरूरत है

glutSpecialFunc(handleSpecialKeypress); 
glutSpecialUpFunc(handleSpecialKeyReleased); 
  • चर isRightK eypressed और isLeftKeyPressed वैश्विक वैरिएबल हैं जिन्हें मैंने परिभाषित किया है।
संबंधित मुद्दे