OpenGL, GLKit, UIPageViewController, Core Graphics y Accelerate: Cuarto día de Big Nerd Ranch

Autor: | Última modificación: 7 de marzo de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post:

Otro día más de Big Nerd Ranch: ya van cuatro

Los desayunos pantagruélicos empezaban ya a hacer mella en mi estómago, y  llegué a pensar que ese día ya no habría huevos para más huevos revueltos con bacon, salchichas  y bistec empanado. Afortunadamente, cuando llegó el momento, logré reponerme y dejar bien alto el pabellón en el cuarto día de Big Nerd Ranch. Scott, un alumno canadiense que está sentado frente a mi, estaba explicando que prefería un desayuno «algo más europeo» y ligero, a base de frutas y yogur…hasta que me vio llegar. Y eso que no ha visto a @carlbalbas o a @fforcen en duelo singular con un cocido madrileño. Alimentadas las neuronas, era hora de bajar bajar a clase para hacer frente a OpenGL y GLKit.

OpenGL y GLKit

Esta era una de las charlas que más me interesaba, ya que casi no había trasteado con OpenGL anteriormente. Primero Jonathan nos dio  un repaso de los principales conceptos, texturas, las diferencias entre OpenGL 1.0 y OpenGL 2.0, como crear «shaders» e incluso recomendó un programa…para Windows llamado Render Monkey. 😉 GLKit es una framework de Apple que facilita mucho el desarrollo en OpenGL, ya que permite una acceso a más alto nivel pero también da acceso a las características de OpenGL 1.0 que con la versión 2.0 resultan difíciles de usar. Con GLKTextureLoader podemos cargar facilmente texturas («imágenes») desde URLs,  ficheros locales, NSData y CGImages. Antes de empezar con los ejemplos del Big Nerd Ranch, hay algunos conceptos previos que hay que tener claros:
  1. OpenGL Normal Vectors
  2. OpenGL Projection Matrix
  3. OpenGL Modelview Matrix
En general, en el sitio de Song Ho, hay excelentes tutoriales de OpenGL.
OpenGL_Cuarto día de Big Nerd Ranch
Relativity de Escher
Consistía en crear un cubo recubierto con una textura de Escher  (Relativity) que se movía dentro de una SkyBox creada con 360 Panorama. El cubo se mueve dentro de la Skybox, y usando CoreMotion, al mover el dispositivo, las imágenes de la SkyBox también se adaptan, dando la ilusión de estar dentro de un mundo virtual.

UIPageViewController

Para descansar un poco de OpenGL, dejamos el ejemplo aparcado y pasamos a darle otro repaso al ejemplo de UIDocument para añadirle un UIPageViewController. Se trata de una app de notas para iPad cuyo contorlador principal es un UISplitViewController. Modificamos el controlador de la derecha para que en vez de estar metido en un UINavigationController, utilizase un UIPageViewController.

Quartz / CoreGraphics, CoreText y generación de PDFs

Después de comer (ligerito para no entorpecer las neuronas), pasamos a CoreGraphics. Cual no sería mi sorpresa, al enterarme que una de nuestras compañeras era Bunny Laden, coautora de EL libro de CoreGraphics. No me gustaría estar en la piel del instructor, teniendo que explicar algo con la autora del libro donde lo ha aprendido delante. ;-D Lo cierto es que Bunny se portó muy bien y no le corrigió nada al hombre, pero seguro que sudó lo suyo. 😉 Basicamente, se trataba de crear un informe de ventas con gráficos y CoreText y «dibujarlo» a un PDF  con CoreGraphics. Es algo bastante farragoso, y estoy trabajando en una forma más sencilla de hacer esto. He quedado en subirlo a GitHub y enseñárselo a mis compañeros en cuento esté listo. Como nota curiosa, el código de ejemplo de este capítulo, lo ha escrito Aaron Hillegass. También hemos visto como crear gráficos alineados a los píxeles para lograr una imagen perfecta, sin zonas borrosas. CoreText es una framework que pide a gritos que se hagan algunas categorías que simplifiquen su uso.

 Accelerate antes de dormir

Aunque el cansancio ya hacía mucha mella, optamos por quedarnos después de la cena para algunas cosas de Accelerate. Se trata de una «framework de frameworks«, que engloba a varias herramientas para computación de alto rendimiento y cálculo vectorial. Contiene los siguientes sub-frameworks:
  1. vImage: Procesamiento de imágenes
  2. vDSP: Transformadas de Fourier y procesamiento de señales
  3. BLAS & LAPACK: Algebra lineal
  4. Funciones matemáticas vectoriales
  5. Funciones matemáticas con operandos de 128bits
No todo es de Apple, ya  que BLAS y LAPACK (para álgebra lineal) están disponibles en otras plataformas. Con vDSP optimizamos el ejemplo de CoreAudio hasta dejarlo irreconocible. La verdad es que es una pasada lo que se puede hacer con Accelerate, y no me imaginaba que este tipo de herramientas estuviese disponible para iOS.