A 15 años de Mortal Kombat

Este post es un offtopic, pero no pude resistirme. Acabo de caer en cuenta de que en Agosto, hace ni más ni menos que 15 años, se estrenaba la película Mortal Kombat: una adaptación a la pantalla grande del famoso video juego.

Mortal Kombat fue una de las primeras películas de éste género (basadas en video juegos), después de Super Mario Bros y Street Fighter, y tras el fracaso rotundo de estas últimas dos, nadie esperaba que Mortal Kombat tuviera mejor dicha.

Los productores de la película estaba al tanto de la situación y decidieron hacerla de todos modos, filmando en Tailandia, donde “no molestarían a nadie”, según se comentaba en un reportaje.

Personalmente disfruté mucho de la película. Mi madre nos llevó a verla al Cine Trocadero (que ya no existe) con mi hermano y también recuerdo haberla visto decenas de veces en VHS en casa de mis Abuelos.

Les dejo el video original del adelanto de la película, encontrado en YouTube:



Posted in Video | 1 Comment

Papers Técnicos en SIGGRAPH 2010

El siguiente video presenta un resumen de los papers técnicos que están siendo presentados esta semana en la Conferencia SIGGRAPH 2010, en Los Angeles. Realmente muy impresionante.

Posted in Computación Gráfica | Comments Off on Papers Técnicos en SIGGRAPH 2010

Grupo Khronos anuncia OpenGL 4.1

Leo en opengl.org que el Grupo Khronos, anunció recientemente la disponibilidad de la especificación para OpenGL 4.1. Khronos realizó el anuncio durante la conferencia SIGGRAPH 2010 que se está llevando a cabo esta semana en Los Angeles.

Este es el sexto update a la especificación realizado en tan solo dos años. Entre las nuevas características anunciadas se encuentra soporte para la API de OpenGL ES 2.0 (ahora OpenGL es un superconjunto de OpenGL ES 2.0), soporte para trabajar con Shaders en formato binario y soporte para punto flotante de 64 bits para Vertex Shaders, entre otras.

De acuerdo con algunos sitios, las nuevas características estarían poniendo a OpenGL por delante de DirectX 11 en términos de funcionalidades, principalmente debido al hecho de poder desarrollar programas para dispositivos móviles y de escritorio utilizando la misma API, algo que de momento no se puede realizar con ninguna versión de DirectX.

Vía opengl.org

Posted in OpenGL | Comments Off on Grupo Khronos anuncia OpenGL 4.1

Big-O

Enconté mediante Reddit un post en Stack Overflow que explica en términos sencillos en qué consiste la notación “Big-O”, utilizada para representar la complejidad de un algoritmo.

Traduzco solo una parte del post aquí, les recomiendo leer el post completo si es que te encuentras en duda o necesitas repasar en qué consiste esta notación.

La notación Big-O es una representación relativa de la complejidad de un algoritmo.

Hay algunas palabras importantes deliberadamente elejidas en esta oración:

  • relativa: únicamente puedes comparar manzanas con manzanas. No puedes comparar un algoritmo que hace multiplicación aritmética con uno que ordena una lista de enteros. No obstante, [comparar] dos algoritmos que hacen operaciones aritmeticas (uno multiplicación y otro suma) te dirá algo significativo.
  • representación: Big-O (en su forma más simple) reduce la comparación entre algoritmos a una única variable. Esa variable es elegida basandose en observaciones y supuestos. Por ejemplo, [los] algoritmos para ordenar son típicamente comparados en base a operaciones de comparación (comparar dos nodos para determinar su orden relativo). Esto asume que comparar es costoso. ¿Pero qué si comparar es barato e intercambiar costoso? Cambia la comparación; y
  • complejidad: si me toma un segundo ordenar 10.000 elementos, ¿cuánto me llevará ordenar un millón? La complejidad, en esta instancia, es una medida relativa de algo más.

Continuar leyendo en Stack Overflow…

Posted in Programacion | Comments Off on Big-O

Shortcuts de Blender

En estos días he aprendiendo a usar Blender (www.blender.org), un software increíblemente enorme que permite desde hacer sencillos modelos 3D hasta películas.

Blender es Software Libre (y además gratis), por lo cual es muy sencillo de instalar. En Fedora simplemente se puede utilizar yum.

Lo primero que van a notar en Blender es que la interfaz de usuario tiene muchísimos controles. En parte por esto, cuando comencé a utilizarlo, noté que la interacción con el programa era lenta. No lenta por el Software en sí, sino que me sentía que la forma en que la interfaz me permitía expresar mis acciones era lenta.

Resulta que, si bien Blender está diseñado para ser utilizado con un Mouse de 3 botones, si no se saca provecho de los atajos (Shortcuts) del teclado, uno pasa mucho tiempo teniendo que revisar montones de controles (y quizás moviéndose entre varias solapas).

Tras mirar algunos videos en YouTube y leer algunos artículos, armé la siguiente lista de atajos comunes. Tomarme un momento para aprenderlos (y al principio teniéndola presente al usar el programa) puede aumentar nuestra velocidad de interacción con la interfaz significativamente.

Veamos algunos atajos comunes.

Blender – Atajos Comunes para Control de Cámara:

  1. 0 : Vista de cámara (camera view).
  2. 3 : Vista de costado (side view).
  3. 7 : Vista desde arriba (top view).
  4. 5 : Cambiar la proyección (perspectiva <-> paralela).
  5. F12 : Renderizar escena desde la posición de la cámara.
  6. alt + click botón izquierdo : rotación libre de cámara (ver nota [1] debajo).
  7. ctrl + alt + click botón izquierdo : zoom hacia adentro y hacia afuera (ver nota [1] debajo).

Blender – Atajos Comunes para controlar Objetos:

  1. click botón izquierdo: establecer centro de rotación y escalado (ver nota [2] debajo).
  2. click botón derecho: seleccionar un objeto o vértice.
  3. g: “grab tool” – toma un objeto y permite moverlo.
  4. s: “size tool” – permite ajustar el tamaño de un objeto (¡esto es distinto a ajustar la Escala!).
  5. r: “rotate tool” – permite rotar el objeto seleccionado respecto del centro especificado.
  6. x: borrar el objeto seleccionado.
  7. shift + d: duplicar el objeto seleccionado.
  8. b: seleccionar.
  9. ctrl + j: “join objects” – permite “unir” objetos para manipularlos como uno solo.
  10. barra espaciadora: abrir menú de objetos (permite agregar nuevos objetos).
  11. A : ver el objeto seleccionado como una malla de triángulos (luego podremos seleccionar sus vértices individuales con click derecho).

Notas:

  1. Algunos manejadores de ventanas capturan la combinación (alt + click izquierdo) y la utilizan para permitir controlar la posición de la ventana. Este es el caso de GNOME, por ejemplo. En estos casos puede engañarse al manejador de ventanas para que ignore la combinación presionando también la tecla “súper” (también conocida como “Windows Logo”).
  2. Para algunas operaciones (tal como la rotación de objetos) se puede especificar el centro. En el caso puntual de la rotación, esto permite realizar rotaciones tanto sobre el centro mismo del objeto como sobre un punto arbitrario del espacio.

Una vez hechos sus modelos, Blender les permite exportarlos en formato VRML (.obj), el cual es muy sencillo de cargar y dibujar en su propio renderer : )

Les dejo un link a algunos tutoriales en blender.org: http://www.blender.org/education-help/tutorials/

Happy Blending!

Posted in Blender, Computación Gráfica | Comments Off on Shortcuts de Blender

¡¡300 Posts!!

¡Hemos llegado a los 300 Posts en Varrojo@Linux! ¡¡Gracias a todos nuestros lectores regulares por acompañarnos durante estos últimos 4 años!!


¡300 Posts! ¡Gracias a todos nuestros lectores!


¡¡Gracias por acompañarnos durante todo este trayecto y sinceramente espero que lleve menos de dos años y medio llegar a los 500!!

¡Saludos!

V.-

Posted in Blog Admin | Comments Off on ¡¡300 Posts!!

Algorithmia en el iOS Hackathon

Durante esta semana estuvimos orgullosamente presentes en el iOS Hackathon, parte del OpenDay organizado por Globant LLC. Globant es una de las mayores compañías de Outsourcing en el Cono Sur.

En el evento desarrollamos una aplicación para iPad que utiliza la tarjeta de video del dispositivo para calcular y desplegar los conjuntos de Julia-Fatou y Mandelbrot. La siguiente imagen muestra la Demo ejecutando sobre el Simulador de iPad:


iFractals, ejecutando sobre el Simulador de iPad

iFractals, ejecutando sobre el Simulador de iPad


La implementación fue realizada utilizando Fragment Shaders de OpenGL ES, con el fin de utilizar la GPU del iPad como un coprocesador en paralelo, capaz de evaluar los Fractales virtualmente al mismo tiempo para cada pixel visible en la pantalla del dispositivo.

Después de desarrollar la Demo, el expositor de Globant nos invitó a explicar el concepto y tecnologías utilizadas a la Audiencia utilizando un iPad real.

Les dejo unas fotos del evento debajo.


El conjunto de Mandelbrot, renderizado en un iPad.

El conjunto de Mandelbrot, renderizado en un iPad.

El conjunto de Julia, renderizado en un iPad.

El conjunto de Julia para c=-0.012+0.74i, renderizado en un iPad.



Agradecemos a Globant por la oportunidad de presentar nuestra Demo en su conferencia.

Posted in Computación Gráfica, Eventos, iPhone, Objective-C, OpenGL | Comments Off on Algorithmia en el iOS Hackathon

Diferencia de Conjuntos con programación funcional de Python

Supongamos que tenemos dos listas a y b de Python y queremos calcular una lista d tal que:

d = a – b #diferencia de conjuntos.

Utilizando las construcciones funcionales de Python (en particular List Comprehension), resulta muy sencillo:

d = [x for x in a if x not in b]

Vean como la construcción del lenguaje prácticamente se lee como la definición formal de diferencia de conjuntos: “d es igual a x para todo x que pertenece a a y x no pertenece a b“.

Si comparamos esto con el equivalente imperativo, es fácil ver que estamos expresando mediante el lenguaje lo que queremos que se haga y no cómo hacerlo exactamente.

Esta sutileza nos permite ahorrar mucho código y ser más productivos desarrollando aplicaciones cuando no es crítico el mantener el control sobre cada instrucción exacta a ser ejecutada.

¿Qué otros ejemplos interesantes de manejo de listas sueles utilizar?

Posted in Programacion, Python | 2 Comments

Curso de C del MIT, ahora online y gratuito

El MIT ha publicado en Internet las trasparencias de su curso “Practical Programming in C”, correspondiente a Enero del 2010.

El curso se compone de 14 trasparencias (una por lección), todas disponibles gratuitamente en el siguiente link:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/lecture-notes/

Yo leí hasta la lección 7 y pude apreciar como el material comienza con lo básico pero rápidamente comienza a cubrir mucho terreno, incluyendo estructuras de datos y algoritmos.

Las últimas lecciones incluyen programación multihilo, concurrencia y comunicación entre procesos sobre Linux.

¡Muy recomendable!

Posted in C++, Programacion | Comments Off on Curso de C del MIT, ahora online y gratuito

Animación Interpolada para Modelos de Quake 2

En un artículo anterior les comentaba que había estado desarrollando un programa para cargar y dibujar modelos del juego “Quake 2” de Id Software. En dicho artículo les mencionaba, a grandes rasgos, el contenido del archivo y cómo éste representa las animaciones mediante el uso de keyframes.

Hasta el momento, el rendering de la animación era realizado sin interpolar entre keyframes, lo cual causaba que la animación se viera un poco tosca. Ayer estuve trabajando en agregar interpolación entre keyframes; El resultado fue un gran suavizado del proceso de animación.

Dejo un nuevo video a continuación. En él podrás notar que, incluso animando a tan solo 2 frames por segundo, pero interpolando, la animación se ve mucho más continua, a pesar de que el video anterior se había generado a 10 frames por segundo.



¿Notas la diferencia? El costo que tenemos que pagar por la interpolación ciertamente es un aumento en el overhead de CPU que tenemos para dibujar cada cuadro.

En el caso particular de éste modelo, cada keyframe se compone de 610 triángulos, cada triángulo de 3 vértices y cada vértice de 5 floats. Así (solo para dibujar éste modelo), entre cada cuadro, tendremos que interpolar ni más ni menos que ¡9150 floats! un proceso relativamente costoso que además aumenta con cada modelo adicional que queremos dibujar.

Como suele suceder en todo lo que tiene que ver con Computación Gráfica, la mejora en el realismo visual se financia a razón de performance. En este caso, no queda duda que el costo en términos de CPU es bien compensado por la mejora visual.

Posted in C++, Computación Gráfica, OpenGL, Quake | 1 Comment