Mostrando entradas con la etiqueta Xcode. Mostrar todas las entradas
  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.
 
   En este primer post voy a mostrar como se configura un proyecto en XCode para que muestre una ventana vacía.
        Abrimos XCode y creamos un nuevo proyecto. Este nuevo proyecto será para OSX y del tipo Command Line Tool.
    Le ponemos el nombre del proyecto, en este caso "MipMapGL" y le indicamos que vamos a utilizar C.
    Ahora añadiremos las librerías OpenGL, para dibujar y GLUT que nos permitirá recibir los eventos de pulsación de las teclas. Para ello nos dirigimos a la sección de Build Phases.
 En la sección de "Link Binary with Libraries" hacemos clic en el botón con el símbolo "+" y en el nuevo menú que se nos abre escribimos OpenGL. Seleccionamos "OpenGL.framework"
 Repetimos el proceso con GLUT.
Ahora que tenemos las dos librerías enlazadas, llega la hora de ponerse a picar código.
    Hacemos clic encima del fichero que se nos creó automáticamente con el proyecto "main.c". En este fichero tenemos ya una función "main" que muestra el mensaje "hello world" escrito por defecto. Lo que haremos es quitarlo para introducir nuestro código.
   Los programas de OpenGL tienen una receta específica que se sigue en todos los casos y que consiste en la siguiente lista de pasos:
  1. Enlazaremos con las librerías que hemos añadido antes poniendo fuera de la función main el siguiente texto  "#include <stdio.h>
    #include <OpenGL/OpenGL.h>
    #include <GLUT/GLUT.h>"
  2. Inicio del contexto gráfico con la función glutInit al que le pasaremos como argumentos &argc,argv. Estos son los parámetros que nos vienen dados por la línea de comandos. Existen un conjunto de parámetros de línea de comandos que OpenGL ya reconoce, pero en este caso no se le está pasando nada así que creará un contexto por defecto sobre el que trabajaremos.
  3. Inicio de la ventana indicando en que posición de la pantalla se colocará con glutInitWindowPosition(posicionEnX,posicionEnY)  y el tamaño de la ventana con glutInitWindowSize(ancho,alto).
  4.  Inicio de las zonas de memoria reservadas para cálculo, también conocidas como buffer con la función glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH). Dejaremos estos valores por ahora y los explicaré en un post siguiente.
  5. Creación de la ventana con un título haciendo uso de la función glutCreateWindow("Titulo")
  6. Inicio de los parámetros de OpenGL con una función que desarrollaremos llamada InitGL.
  7. Estableceremos la función que controla lo que se muestra en la pantalla con glutDisplayFunc.
  8. Indicaremos la función que responderá ante las flechas del teclado glutSpecialFunc
  9. Iniciaremos el bucle de dibujo de OpenGL con la función glutMainLoop. 
Con todo esto nuestro programita tendrá la siguiente forma:
(Para descargar el código id al siguiente enlace)

El desarrollo de las funciones Display, Teclas y un error que aún no conocéis que existe en la próxima parte ;).
No olvidéis de seguir este sitio haciendo clic en el botón de la derecha. :)
La librería openCV nos permite añadir características de visión por computador a nuestras aplicaciones de iOS como puede ser unir cuatro imágenes de un mismo panorama en una sola (un ejemplo de ello lo podéis ver aquí: OpenCVSwiftStitch).

Muchos son los tutoriales que explican como realizar la instalación de la librería pero muchos de ellos están desactualizados. Por ello os traigo este tutorial.

  1. Primero de todo hay que descargar la librería de la página oficial que enlazo aquí.
  2. Una vez lo descarguemos abrimos el proyecto en el que vamos a desarrollar en XCode. A la par abrimos el Finder en la carpeta en la que hemos descargado la librería y arrastramos esta del finder a la parte derecha de XCode junto con todos nuestros archivos de proyecto.
  3. Es hora de comprobar que XCode ha enlazado bien la librería y para eso hacemos clic en el icono del proyecto y nos dirigimos a la pestaña "Build Phases". Entre las opciones que nos aparecen debemos encontrar "Link Binary with Libraries" y al expandirla con la flecha que aparece a la izquierda debe encontrarse "opencv2.framework". 
    • Si no aparece debemos dirigirnos a la barra de herramientas de XCode File/Add Files to... y buscamos la librería.

   Si has seguido los pasos anteriores, enhorabuena ya tienes la librería instalada en tu proyecto; pero aún distas mucho de poder utiizarla.  Llegados a este punto, me gustaría anotar que la librería está en el lenguaje de programación C++, querido y odiado dentro de la comunidad de programadores pero no por ello nos vamos a amedrentar. Esto significa que nuestro proyecto que está escrito en el actual lenguaje de programación de Apple, Swift 1.2 (para aquellos que ya utilicen XCode 7 beta,  Swift 2) va a pasar a estar escrito en tres lenguajes de programación: nuestro actual Swift, el anterior lenguaje de iOS ObjectiveC y C++. Objective C++ únicamente está para hacer de puente entre C++ y Swift y por ello es fundamental, ya que las operaciones de visión artificial las tendremos que programar en C++ e indicarle a Swift que lo ejecute.
   Es por esto que en Objective C necesitaremos crear una clase que solemos llamar "Wrapper" o envoltorio. Para hacer esto creamos un nuevo fichero del tipo objective C, automáticamente nos aparecerá una ventana que nos preguntará si queremos configurar un  "Bridging Header" o una cabecera de "puenteo", le decimos que sí  y se nos crearán los dos ficheros.
    En la nueva cabecera de "puenteo" lo único que tenemos que escribir es #include "Wrapper.h" que se habrá creado si no habrá que crearlo.  Otro detalle que hay que hacer ahora es cambiar la extensión del fichero Wrapper de "Wrapper.m" que es como lo pone por defecto Xcode a "Wrapper.mm", de esta forma nos ahorraremos posibles problemas de compilación.
   Nuestro "Wrapper" debe contener las cabeceras de aquellas clases  que creemos en C++ para usar la librería. Lo que quiero que tengáis presente es que no podéis añadir cabeceras de Objective C a vuestros ficheros de C++ porque empezarán a aparecer errores en cabeceras que nunca deberíamos tocar como pueden ser las de NSObject.
  Otro dato más, como estamos tratando con una librería de visión artificial lo suyo es que podamos trabajr sin problemas entre las clases Mat de la librería y la clave UIImage de Swift, para ello os recomiento encarecidamente que copies la clase "UIImage+OpenCV" que está en el ejemplo que os enlacé arriba.
  Ahora si podémos usar tranquilamente nuestra librería de visión artificial.
  Espero que os sea útil y os ahorre horas de búsqueda de información.