domingo, 12 de febrero de 2012

jueves, 9 de febrero de 2012

OPENGL

QUE ES OPENGL
OpenGL (Pronunciado: open-yi-el), también conocido como “Open Graphics Library”, es un lenguaje dedicado para la producción de gráficas tridimensionales (3D) desarrollado por Silicon Graphics. Este permite a los desarrolladores crear gráficas computarizadas y efectos especiales totalmente independientes del sistema operativo donde se esté ejecutando. Antes, los desarrolladores tenían que producir su propio código para la creación de gráficas, y este dependía mucho del sistema operativo donde se estuviera reproduciendo. OpenGL libera esta restricción, permitiendo a los desarrolladores, con una sola programación, hacer productos para diversas plataformas.
OpenGL trabaja en base a “comandos”, los cuales dictan las acciones a tomar para la creación de la imagen y los efectos especiales. Esto hace que acciones repetitivas sean más fácil programar al sólo tener que invocar un comando en vez de entrar toda una serie de líneas de códigos.
Varias empresas han hecho sus propias variaciones de OpenGL, tales como Microsoft (Microsoft OpenGL) y Apple (Apple OpenGL). Microsoft ahora impulsa otro producto conocido como Direct3D (DirectX) para la plataforma Windows. OpenGL es lo que se conoce como una solución “open source”, la cual la fuente (source) del código esta disponible para todos. Direct3D es propietario, lo que significa que sólo Microsoft tiene la fuente del código.

                                                  

LIBRERÍAS AFINES A OPENGL.
OpenGL proporciona un conjunto de comandos poderoso pero a la vez sencillo, para generar una escena tridimensional en la pantalla de nuestro ordenador. Así pues, todas las operaciones gráficas realizadas a alto nivel deben basarse en estos comandos
- OpenGL Utility Library (GLU): Esta librería proporciona una serie de funciones que sirven para tareas tales como actualizar matrices para obtener orientaciones y proyecciones del punto de vista adecuado, generar superficies etc... Todas las funciones de esta librería comienzan por las letras “glu”, y se irán describiendo a medida que sean útiles.
· OpenGL Auxiliary Library (AUX): Son muy útiles y cubren una gran variedad de funciones como gestionar las ventanas, gestionar los eventos de entrada a la aplicación o dibujar objetos complejos en 3D.
OpenGL Extention to the X Windows System (GLX): Se utilizan para trabajar con el sistema de ventanas X Windows.
APLICACIONES
Las operaciones que podemos realizar con OpenGL, y en general siguiendo este orden son las siguientes:
1.- Modelar figuras a partir de las primitivas básicas, creando descripciones geométricas de los objetos (puntos, líneas, polígonos, fotografías y mapas de bits).
2.- Situar los objetos en el espacio tridimensional de la escena y seleccionar el punto de vista desde el cual queremos observarla.
3.- Calcular el color de todos los objetos. El color puede asignarse explícitamente a cada pixel, o bien puede calcularse a partir de las condiciones de iluminación, o también puede asignarse por medio de una textura colocada sobre los objetos.
4.- Convertir la descripción matemática de los objetos y la información de color asociada, en pixeles de la pantalla, en forma de imagen virtual 3D.
A la vez que se realiza este proceso, OpenGL desarrolla otras operaciones complejas como la eliminación de partes de objetos que quedan ocultas para el usuario por estar tapadas por otros objetos de la escena.
EJEMPLO DE CODIGO OPENGL

 Dibujo de puntos (GL_POINTS) 
Es la más simple de las primitivas de ogl. Para comenzar, veamos el siguiente código: 
glBegin(GL_POINTS);
  glVertex3f(0.0f, 0.0f, 0.0f);
  glVertex3f(10.0f, 10.0f, 10.0f);
glEnd(); 


Dibujo de líneas (GL_LINES)
GLfloat angulo;
int i;
glBegin(GL_LINES);
for (i=0; i<360; i+=3)
{
      angulo = (GLfloat)i*3.14159f/180.0f; // grados a radianes
     
glVertex3f(0.0f, 0.0f, 0.0f);
      glVertex3f(cos(angulo), sin(angulo), 0.0f);
}
glEnd();



Triángulos (GL_TRIANGLES)

glBegin(GL_TRIANGLES);
      glVertex3f(0.0f, 0.0f, 0.0f); // V0
      glVertex3f(1.0f, 1.0f, 0.0f); // V1
      glVertex3f(2.0f, 0.0f, 0.0f); // V2
      glVertex3f(-1.0f, 0.0f, 0.0f); // V3
      glVertex3f(-3.0f, 2.0f, 0.0f); // V4
      glVertex3f(-2.0f, 0.0f, 0.0f); // V5
glEnd();


Color de relleno 
glBegin(GL_TRIANGLES);
     
glColor3f(1.0f, 0.0f, 0.0f);
      glVertex3f(0.0f,0.0f, 0.0f);
      glVertex3f(2.0f,0.0f, 0.0f);
      glVertex3f(1.0f,1.0f, 0.0f);

      glColor3f(0.0f,1.0f, 0.0f);
      glVertex3f(-1.0f,0.0f, 0.0f);
      glVertex3f(-3.0f,2.0f, 0.0f);
      glVertex3f(-2.0f,0.0f, 0.0f);
glEnd();