"Ningún juego dura tanto hasta que te lo terminas como el que te programas tú mismo,
ninguno te absorbe tanto y ninguno te produce tanta satisfacción cuando lo has acabado"
Programacion de videojuegos
Inicio Curso de programación de juegos 10. Teclado, ratón y cámara
Sábado 18 de Noviembre del 2017

Menu principal
Colaborar (con PayPal)

Para continuar con el trabajo de esta Web y poder pagar el hosting, viene bien la ayuda que sea. Gracias a todos.

Importe: 

Ultimas descargas
19.Jan

Clase que permite dibujar texto en OpenGL con mucha facilidad.Usa FreeType2.Para ver que hace y c...


10. Teclado, ratón y cámara Imprimir Correo electrónico
Videojuegos - Curso de Programación de juegos
Escrito por Vicengetorix   

En este capitulo veremos uno de los apartados mas importantes para un juego, teclado y raton. Veremos tambien como vamos a modificar la camara en OpenGL, lo que nos permitira ver nuestra escena desde otro lugar o mirar a otra parte. Al terminar el capitulo estaremos ya en condiciones de pensar que podemos hacer un juego simple.





Al terminar este capitulo sabremos ya organizar un programa windows, pintar cosas en 3D y 2D, mover estas cosas, escribir texto en una pantalla OpenGL, controlar la velocidad de nuestro programa y usar el teclado y raton para interactuar con el programa. No somos todavia los gurus de Nintendo pero ya podriamos hacer nuestros pinitos en esto. Vamos al capitulo.

Primero una explicacion de lo que vamos ha hacer respecto al teclado.

En nuestra funcion ProcesaMensajes vamos a interceptar mas mensajes de los que genera el sistema operativo, concretamente los que nos interesan para controlar raton y teclado.
En el caso del teclado nos seran utiles los mansajes WM_KEYDOWN, que ya controlabamos para poder salir del programa con la tecla ESC; WM_KEYUP y WM_CHAR.

Windows usa lo que llama el Virtual Key Code para identificar cada tecla del teclado (y del raton). No es mas que un codigo de entre 0 y 255 asociado a cada tecla y que se envia al programa activo al presionar o soltar dicha tecla.
En la siguiente tabla se ven la mayoria de estos codigos y su tecla asociada (el valor esta en hexadecimal y la descripcion de la tecla en ingles pero valdra):

Nombre simbolico
Valor
(hexadecimal)
Tecla (del teclado o del raton)
VK_LBUTTON 01 Left mouse button
VK_RBUTTON 02 Right mouse button
VK_CANCEL 03 Control-break processing
VK_MBUTTON 04 Middle mouse button (three-button mouse)
VK_BACK 08 BACKSPACE key
VK_TAB 09 TAB key
VK_CLEAR 0C CLEAR key
VK_RETURN 0D ENTER key
VK_SHIFT 10 SHIFT key
VK_CONTROL 11 CTRL key
VK_MENU 12 ALT key
VK_PAUSE 13 PAUSE key
VK_CAPITAL 14 CAPS LOCK key
VK_ESCAPE 1B ESC key
VK_SPACE 20 SPACEBAR
VK_PRIOR 21 PAGE UP key
VK_NEXT 22 PAGE DOWN key
VK_END 23 END key
VK_HOME 24 HOME key
VK_LEFT 25 LEFT ARROW key
VK_UP 26 UP ARROW key
VK_RIGHT 27 RIGHT ARROW key
VK_DOWN 28 DOWN ARROW key
VK_SELECT 29 SELECT key
VK_PRINT 2A PRINT key
VK_EXECUTE 2B EXECUTE key
VK_SNAPSHOT 2C PRINT SCREEN key
VK_INSERT 2D INS key
VK_DELETE 2E DEL key
VK_HELP 2F HELP key
'0' 30 0 key
'1' 31 1 key
'2' 32 2 key
'3' 33 3 key
'4' 34 4 key
'5' 35 5 key
'6' 36 6 key
'7' 37 7 key
'8' 38 8 key
'9' 39 9 key
'A' 41 A key
'B' 42 B key
'C' 43 C key
'D' 44 D key
'E' 45 E key
'F' 46 F key
'G' 47 G key
'H' 48 H key
'I' 49 I key
'J' 4A J key
'K' 4B K key
'L' 4C L key
'M' 4D M key
'N' 4E N key
'O' 4F O key
'P' 50 P key
'Q' 51 Q key
'R' 52 R key
'S' 53 S key
'T' 54 T key
'U' 55 U key
'V' 56 V key
'W' 57 W key
'X' 58 X key
'Y' 59 Y key
'Z' 5A Z key
VK_NUMPAD0 60 Numeric keypad 0 key
VK_NUMPAD1 61 Numeric keypad 1 key
VK_NUMPAD2 62 Numeric keypad 2 key
VK_NUMPAD3 63 Numeric keypad 3 key
VK_NUMPAD4 64 Numeric keypad 4 key
VK_NUMPAD5 65 Numeric keypad 5 key
VK_NUMPAD6 66 Numeric keypad 6 key
VK_NUMPAD7 67 Numeric keypad 7 key
VK_NUMPAD8 68 Numeric keypad 8 key
VK_NUMPAD9 69 Numeric keypad 9 key
VK_SEPARATOR 6C Separator key
VK_SUBTRACT 6D Subtract key
VK_DECIMAL 6E Decimal key
VK_DIVIDE 6F Divide key
VK_F1 70 F1 key
VK_F2 71 F2 key
VK_F3 72 F3 key
VK_F4 73 F4 key
VK_F5 74 F5 key
VK_F6 75 F6 key
VK_F7 76 F7 key
VK_F8 77 F8 key
VK_F9 78 F9 key
VK_F10 79 F10 key
VK_F11 7A F11 key
VK_F12 7B F12 key
VK_F13 7C F13 key
VK_F14 7D F14 key
VK_F15 7E F15 key
VK_F16 7F F16 key
VK_F17 80H F17 key
VK_F18 81H F18 key
VK_F19 82H F19 key
VK_F20 83H F20 key
VK_F21 84H F21 key
VK_F22 85H F22 key
VK_F23 86H F23 key
VK_F24 87H F24 key
VK_NUMLOCK 90 NUM LOCK key
VK_SCROLL 91 SCROLL LOCK key
VK_LSHIFT A0 Left SHIFT key
VK_RSHIFT A1 Right SHIFT key
VK_LCONTROL A2 Left CONTROL key
VK_RCONTROL A3 Right CONTROL key
VK_LMENU A4 Left MENU key
VK_RMENU A5 Right MENU key
VK_PLAY FA Play key
VK_ZOOM FB Zoom key

 



¡Sólo los usuarios registrados pueden escribir comentarios!
+/- Comentarios
Buscar
Anónimo   |190.40.130.xxx |01-02-2010 02:55:15
gracias por tus tutoriales. la verdad son ecelentes. yo voy recien empezando,
pero quede muy sorprendido. muchas gracias
Sysseon   |87.221.246.xxx |12-07-2009 23:39:50
Buenas! Lo primero, muchas gracias por los tutos. La verdad es que no sé nada
de programación en windows así que muchas veces tengo que creerme las cosas
porque sí, pero en general estoy aprendiendo bastante.
Sobre este capítulo...
una pregunta. En lugar de usar gluLookAt() para mover la cámara, estás
modificando la matriz de proyección... supongo que no me ha quedado claro
alguno de los primeros conceptos, pero qué haces con eso? Cambiar la posición
del origen de coordenadas y con eso mover toda la escena o qué?
Y otra
preguntita... hay alguna función (la he intentado buscar) para conocer la
posición de la cámara? Es decir, con gluLookAt() introduces la posición,
dirección e inclinación... se pueden recuperar estos puntos y vectores?
Bueno,
muchas gracias!
Vicengetorix   |85.53.195.xxx |13-07-2009 01:49:00
Efectivamente, igual que con la matriz de modelo, con la de proyeccion, cuando
aplicas traslaciones estas trasladando en punto de vista (camara) y cuando
aplicas rotacion, rotas la camara. Si cambias la camara, obviamente, la escena
cambia entera.

gluLookAt es una funcion que aplica las rotaciones y
traslaciones necesarias para cumplir con los parametros. OpenGL no guarda estos
datos, si quieres saber donde esta la camara, hay que controlarlo en tu programa
a la vez que la mueves, sabiendo que empieza en las coordenadas 0,0,0.
Sysseon   |87.221.246.xxx |13-07-2009 03:14:19
Ok, muchas gracias por la explicación. Por cierto, espero impaciente la carga
de modelos externos jaja. Creo que voy demasiado rápido... En fín, muchas
gracias por lo que estás haciendo, es imposible encontrar algo parecido para la
gente que parte de cero.
Salidos!
carlos andres  - agregar varios cubos     |190.99.137.xxx |02-07-2009 17:10:22
Hola la verdad me encanto tu sitio web e aprendido bastante sobre opengl, me
encuentro haciendo una aplicación para android con opengl es y me preguntaba si
podrías indicarme como puedo hacer para agregar cubos a petición del usuario,
es decir cuando el usuario hace click en un botón agregue un cubo y así
susecivamente los que el quiera y que sean con diferentes texturas.

desde ya
muchas gracias.
Vicengetorix   |85.59.250.xxx |02-07-2009 17:41:41
Asi a bote pronto se me ocurre utilizar una lista enlazada que contenga los
datos del objeto a pintar, y que se vayan creando a peticion del usuario.
Luego
no habria mas que ir recorriendola hasta el final y pintando los objetos, cada
uno con sus datos, textura entre ellos.
carlos andres  - agregar varios cubos     |190.99.137.xxx |02-07-2009 17:49:58
Si ya se me había ocurrido esta noche, no pude dormir pensando en eso :) pero
me esta dando guerra la lista ahí vamos, ya lo hice con un ciclo for y funciona
pero me gusta mas la lista por que puedo guardar los atributos de cada cubo en
particular, aprovecho para hacerte otra pregunta, no tienes un ejemplito de
selección de objetos, es que para mi cada cubo debe ser independiente y debe
ser movido a posiciones distintas dentro de un plano.

muchas gracias por tu
ayuda.
Vicengetorix   |85.59.250.xxx |02-07-2009 17:54:48
Lo tengo en cola, sera uno de los proximos capitulos.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 


Banner
Spanish Chinese (Simplified) English French German Japanese Portuguese Russian