Mostrando entradas con la etiqueta Mip robot. Mostrar todas las entradas

  MipMapGL tiene como objetivo dibujar el mapa, cuando movemos el robot desde nuestro MacBook Pro con las flechas de teclado.
   La extensión de OpenGL, GLUT, nos permite leer de teclado fácilmente.
  Partimos de la configuración del proyecto tal y como lo hemos dejado en el post anterior.  
Como la implementación de las flechas del teclado no se corresponde con la parte de la aplicación que dibuje vamos a crear otros fichero .c con su correspondiente .h   llamados keyboard.
   En el fichero keyboard.h  añadimos la cabecera principal ( main.h ) que creamos en el post anterior.
En este mismo fichero escribimos la cabecera de la función Teclas que se muestra en la siguiente imagen.
   Ahora abrimos el keyboard.c y desarrollamos el método. Este método es uno de los más fáciles que nos vamos a encontrar, puesto que consiste en una única estructura de control de flujo del tipo switch  con la que seleccionar la tecla leída.
   Las teclas de las flechas del teclado tienen su propio valor que podremos acceder mediante las variables definidas GLUT_KEY_UP, GLUT_KEY_DOWN, GLUT_KEY_LEFT, GLUT_KEY_RIGHT.
  El método teclas quedará de la siguiente forma:
   Con esto podremos comenzar a desarrollar código a mover objetos en nuestra pantalla. Pero esto lo veremos en el próximo post ;).
   Recuerda seguir este blog dándole a "Seguir" en el botón que tienes a tu derecha.

      MipMapGL es mi pet project, es decir, mi proyecto personal con el que pretendo aprender.
Este proyecto en concreto pretendo crear una aplicación para MacOSX con la que controlar el robot Mip usando las flechas del teclado, mostrando en la pantalla lo que se lee del radar que tiene incorporado.
  Para ello utilizaré el lenguaje C en conjunto con las librerías de control del robot Mip MipCAPI, la librería de gráficos OpenGL y la librería de concurrencia pthreads.


  Continuamos con la configuración de la librería OpenGL desde el punto en el que lo habíamos dejado en el post anterior. En el que teníamos pendiente los siguientes puntos:
  • Inicialización de OpenGL en el método InitGL
  • La función de dibujo en la pantalla Display
  • La función de control de las flechas del teclado Teclas
  • Comunicarmos con Mip. 
  Pero antes de iniciar OpenGL vamos a hacer un poco estructuración del código, vamos a escribir todas las funciones que tienen que ver con el dibujo en la pantalla en un fichero C a parte. Para ello creamos un nuevo fichero llamado view.c  y su correspondiente cabecera view.h.

  Además se creará una cabecera general que van a compartir varios de los ficheros .c del proyecto. Se llamará main.h y a este nuevo fichero moveremos las inclusiones que tenemos en el fichero main.c. Colocaremos estas inclusiones en la estructura #ifndef [...] #define [...] #endif [...] que nos genera automáticamente XCode al crear un fichero de cabecera.



  En el archivo view.h escribiremos la cabecera de nuestra función InitGL , es decir, escribimos void InitGL(); Es importante que se incluya en este archivo la cabecera general que creamos antes.

 
 Ahora nos colocamos en el archivo view.c  y reescribimos la cabecera de la función para desarrollarla. 
  La configuración de OpenGL en este método sigue los siguientes pasos:
  1.  Establecemos el color de fondo.
  2. Determinamos el modo de la matriz que vamos a utilizar.
  3. Cargamos una matriz identidad en el motor de OpenGL, con la que empezarán los cálculos.
  4.  Determinamos el tipo de perspectiva que vamos a utilizar.
  El establecimiento del color de fondo se realiza con la función glClearColor que recibe 4 parámetros correspondientes a las componentes RGBA del color, es decir a la componentes, rojo, verde, azul y transparencia del color. En principio lo estableceremos a negro, que se corresponde con los cuatro parámetros a 0.
 
  A continuación determinamos el modo de matriz que vamos a utilizar dentro del mecanismo de OpenGL con la función glMatrixMode. Esta función recibe un único parámetro del tipo GLEnum  definido dentro de la librería de OpenGL, en este caso se le pasa el parámetro que recibe por defecto GL_MATRIXMODE.
  OpenGL realiza sus cálculos como multiplicaciones de matrices, para iniciar los cálculos necesita la matriz identidad, por ello la cargamos utilizando la función glLoadIdentity  que no recibe ningún parámetro. 
   Por último estableceremos el tipo de perspectiva que vamos a utilizar. Esto va a determinar como vamos a ver los objetos. Tenemos dos opciones la perspectiva perpendicular y la perspectiva.
 La perspectiva perpendicular muestra los objetos como su pasara un rayo de luz por cada uno de los vértices y siguen en paralelo.  Mientras que la perspectiva cónica pasa cada rayo por los vértices y los converge en el ojo del usuario.  La siguiente ilustración muestra la diferencia:


 MipMapGL  es un trabajo en dos dimensiones por lo que no será necesario utilizar una perspectiva cónica sino la perpendicular u ortográfica. 
 Teniendo claro el tipo de perpectiva tenemos que configurar el espacio de trabajo en el que vamos a dibujar los objetos. El espacio de trabajo se configura con los parámetros de espacio hacia la izquierda, la derecha, hacia abajo, hacia arriba, la distancia de cerca y la distancia de lejos. 
  Si queremos configurar el espacio de trabajo como un espacio cúbico de 1 unidad tenemos que pasarle los siguientes valores como parámetros:

 Con esto ya está configurado OpenGL para comenzar a dibujar en él. Pero seguiremos con el dibujo en el próximo post, la semana que viene. Recordad seguir este blog en el botón "Seguir" que tenéis a la derecha ;)

EDICIÓN: Ya tenéis disponible el proyecto configurado el proyecto hasta este punto en el siguiente enlace: https://goo.gl/281XDj