Quiero usar arriba, abajo, izquierda, derecha como parte de los controles de una aplicación opengl + glut. ¿Cómo me refiero a las teclas dentro de mi función 'keyboard
' (la que paso a glutKeyboardFunc
)?¿Cómo especifico las teclas direccionales de un teclado en exceso?
5
A
Respuesta
4
Necesita glutSpecialFunc.
Por ejemplo -
#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
sus funciones deben ser algo como estos
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;
}
}
y también es necesario para invocar estos en su método main()
glutSpecialFunc(handleSpecialKeypress);
glutSpecialUpFunc(handleSpecialKeyReleased);
- Las variables isRightK eyPressed y isLeftKeyPressed son variables globales que he definido.
Cuestiones relacionadas
- 1. Deshabilitar teclas en el teclado
- 2. Cómo mover un sprite con las teclas del teclado usando libGDX?
- 3. cómo reemplazar el comportamiento de las teclas <ENTER> del teclado virtual en Android
- 4. Cómo leer códigos de teclas del teclado USB con teclas de medios
- 5. ¿Cómo puedo responder a las teclas de flecha del teclado externo?
- 6. En Clojure, ¿cómo desestructurar todas las teclas de un mapa?
- 7. cómo ordenar las teclas HashMap
- 8. Mapeo de las teclas de un hash
- 9. ¿Cómo distinguir las teclas más/igual e igual en javascript?
- 10. Detectar y actuar sobre las teclas de dirección del teclado en Java
- 11. Maldiciones al obtener las teclas de flecha
- 12. Iterar todas las teclas de un mapa
- 13. ¿Cómo puedo capturar los eventos del teclado desde qué teclas?
- 14. ¿Cómo especifico un rango de Excel variable?
- 15. ¿Cómo especifico un rango de caracteres Unicode?
- 16. ¿Cómo diferenciar entre las teclas 'Enter' y 'Return' en Javascript?
- 17. ¿Cómo no usar en exceso jQuery?
- 18. ¿Cómo cambiar las teclas de atajo para un comando dado en ReSharper?
- 19. cómo obtener las teclas de dirección del teclado para activar la navegación (página anterior/siguiente) enlaces dentro de un blog
- 20. ¿Cómo puedo detectar un modificador de teclado en un bookmarklet?
- 21. mostrar las teclas en Emacs Keymap Valor
- 22. vim: cómo especificar las teclas de flecha
- 23. cómo mover un div con las teclas de flecha
- 24. Las teclas de acceso en ASP.NET MVC
- 25. ¿Cómo especifico las condiciones del instalador de Visual Studio?
- 26. ¿Cómo ver las últimas teclas presionadas en vim?
- 27. Cómo deshabilitar las teclas Esc y cursor en vim
- 28. Ordenar un diccionario (con las teclas de fecha) en Python
- 29. ¿Cómo especifico un estilo de línea tipo flecha en Matplotlib?
- 30. Obtener todas las teclas que se presionan