Como comenté en el post previo, vamos a empezar a definir la tecnología que utilizaremos.
El lenguaje de programación por excelencia en este tipo de aplicaciones viene a ser C/C++. No obstante doy por supuesto que cualquiera que se hace llamar informático domina ya bastante bien este par de lenguajes. Lo que no dominames es un “nuevo” lenguaje emergente llamado Python. Por ello, orientaré esta serie de tutoriales a este lenguaje. No lo he comentado antes pero TODO absolutamente TODO lo basaré en software libre. Con ello quiero decir que la plataforma en la que trabajo es una Gentoo Linux. No debería haber ninguna diferencia respecto a otras plataformas en las que sigais lo que aquí se dice. Únicamente necesitareis el intérprete Python y sus respectivos módulos, y las versiones adecuadas de las diferentes librerías que utilizaremos para la plataforma que esteis utilizando. Una vez dicho ésto, paso a describir la tecnología en la que nos basaremos:
- Python: Lenguaje de programación de alto nivel diseñado por Guido van Rossum a principios de los años 90. No obstante actualmente es un lenguaje libre que se administra desde la Python Software Foundation. Los programas escritos en Python facilitan la reutilización de código ya que proporciona gran cantidad de módulos estándard. Ésto facilita la tarea al programador el cual únicamente deberá centrarse en la lógica de su problema y no en los problemas que pueda dar el lenguaje. Python es un lenguaje interpretado y multiparadigma. Ésto quiere decir que el código no se compila ni se enlaza, únicamente se interpreta y se ejecuta. Al ser así, el programador se ahorra un tiempo más que considerable en el desarrollo del programa. La propiedad multiparadigma del lenguaje significa que no fuerza a programar en un estilo concreto si no que permite diferentes estilos y será el programador el que elija el que mejor se adecue a su forma de programar. Los paradigmas estándard de Python son la programación orientada a objetos, programación estructurada y la programación funcional. No obstante, mediante el uso de módulos podemos añadirle otros paradigmas de programación. Hay otro concepto importante a definir, no es otro que lo “pythónico”. Un código es pythónico si sigue la filosofía de legibilidad y transparencia. Contrariamente, un código ofuscado y opaca se le llama “no pythónico”. Esta filosofía queda bastante clara en el Zen de Python. A continuación colocaremos dos códigos para comprender la facilidad respecto a C de Python:
Nos disponemos a programar el cálculo de la serie de Fibonacci en C:
long fibonacci(int n)
{ if (1 == n || 2 == n) { return 1; } else { return (fibonacci(n-1) + fibonacci(n-2)); } }
Podemos hacer un código no pythónico haciendo una simple conversión:
def fibonacci(n): if x == 0 || 2==n: return 1 else: return (fibonacci(n-1)+fibonacci(n-2))
O por el contrario crear un código pythónico:
O por el contrario crear un código pythónico:
import operator factorial = lambda x: reduce(operator.__mul__, range(1, x))
Básicamente estas son las herramientas que utilizaremos. Las primeras a modo de introducción para irnos haciendo a la forma de trabajar y, una vez ya dominemos las bases nos olvidaremos del árduo trabajo de llamar directamente a físicas y contextos gráficos y lo haremos todo a partir de una capa de abstracción que nos facilita Crystal Space. Seguramente me habré dejado alguna herramienta, cuando me venga a la cabeza, es decir, cuando la necesitemos, ya la comentaré.
- OpenGL: OpenGL es una especificación estándard que define una API multilenguaje y multiplataforma para escribir aplicaciones que produzcan gráficos 2D y 3D. Es una librería libre teniendo en cuenta su política de licencias. OpenGL se utiliza en CAD o en realidad virtual, también en representación científica o en simulaciones de vuelo o, como no, en el desarrollo de videojuegos en el que compite directamente con Direct3D de M$ Windows. En la actualidad OpenGL tiene dos propósitos principales: el primero, ocultar la complejidad de la interfaz con las diferentes tarjetas gráficas, presentando al programador una API única y uniforme; y la segunda, ocultar las diferentes capacidades de las diversas plataformas hardware, requiriendo que todas las implementaciones soporten el conjunto completo de características OpenGL. Basándonos en esta API nosotros utilizaremos un par de bibliotecas externas para desarrollar nuestros gráficos iniciales. Estas bibliotecas serán GLU y GLUT. La primera ofrece funciones ampliadas para la renderización de gráficos y la segunda para la interacción con teclado y ratón.
- PyOpenGL: Ahora toca conectar el lenguaje de programación que utilizaremos, es decir, Python; y las librerías de dibujo gráfico, es decir OpenGL y sus extensiones GLU y GLUT. Para ello instalaremos PyOpenGl que no es más que un módulo para Python que enlaza con las librerías anteriormente definidas. Es una libería completamente libre basada en la licencia BSD. Sólo comentar que es aconsejable instalar los siguientes módulos para trabajar de forma cómoda con PyOpenGL: Doy por sentado que las librerías OpenGL, GLU, GLUT y GLE estás instaladas correctamente en el sistema. Además de éstas y del intérprete Python más reciente hemos de instalar Numpy para cálculo numérico complejo, PIL para el tratamiento fácil de imágenes, PyDisptcher es un módulo de control de eventos, SimpleParse es un módulo para parsear documentos basados en el formato VRML97, TTFQuery y FontTools para el tratamiento de fuentes, PyGame para añadir funcionalidades de contextos gráficos y de ventana y win32all.
- Open Dinamics Engine: Open Dinamics Engine o como se le suele conocer, ODE, es una librería de altas características y libre para simular la dinámica de cuerpos rígidos. Las características de la misma están completas, estables y maduras. Es fácil acceder a ellas mediante lenguajes C/C++. Su uso suele ser en detección de colisiones con fricción. Suele ser útil para la simulación de coches, objetos en entornos de realidad virtual o criaturas virtuales. Es actualmente una de las más usadas en entornos de juegos, herramientas 3D y herramientas de simulación.
- Crystal Space: Crystal Space es una plataforma de desarrollo de gráficos 3D en tiempo real, concretamente orientada a juegos. Tiene una capa de abstracción a OpenGL desarrollada por Nvidia llamada Cg y, otra a ODE, entre muchas otras características como audio o vídeo. Crystal Space tiene el componente que crea el concepto de entidad al que se le pueden aplicar características físicas concretas. Esta librería es parte del Engine y se llama CEL. Este componente es multilenguaje y soporta bastante bien Python.
Sin más, ¡comencemos!
Can you write another article about this subject simply because this article was a bit difficult to fully grasp?