Primitivas en OpenGL

Este tutorial cubre el manejo de primitivas en OpenGL, fundamental a la hora de realizar cualquier tipo de aplicación 3d, ya que con estas (especialmente los triángulos) es que se representan los objetos 3d en los videojuegos. Al igual que en los anteriores tutoriales vale la pena aclarar que la documentación sobre la que se basa este tutorial es la de la implementación 1.1 de OpenGL, que aún sigue vigente en la implementación actual, pero con variaciones gracias a la introducción de nuevas tecnologías en las tarjetas gráficas.

Este tutorial, a diferencia de los anteriores, permite ver en acción las capacidades de OpenGL al mismo tiempo que su sencillez, posteriormente, con la introducción de las transformaciones, texturas, iluminación, extensiones y shaders se mostrara la potencia que la actual versión de OpenGL permite.

PRIMITIVAS

En el mundo físico los objetos poseen formas variadas que no necesariamente guardan relación con los objetos en la geometría básica. En los videojuegos y demás software 3d en tiempo real, representar esas formas de manera exacta sería muy costoso computacionalmente hablando (hardware), al punto de que sería casi imposible con la tecnología actual, es por eso que se usan aproximaciones para hacer que las cosas se vean lo mas cercanas posibles a la realidad y al mismo tiempo, lo mas ajustado posible a las capacidades del hardware actual. Al fin y al cabo hay un dicho en computación gráfica “si luce bien, esta bien”.

Ejemplo alambres
Un modelo hecho de triángulos a la izquierda, a la derecha con superficie e iluminación.


OpenGL hace uso del lo que sus creadores llaman el “paradigma Begin/End”, que simplemente es la forma en que se pasan las instrucciones para indicar al API como se deben armar las primitivas, a través de dos funciones:

void glBegin( enum mode );
void glEnd( void );

La función glBegin() indica a OpenGL que los siguientes llamados a la funcion glVertex(), entre esta y glEnd() deberán ser interpretados como vértices para ensamblar la primitiva especificada en (enum mode), el parámetro de la función glBegin(). Adicionalmente a especificar vértices es posible especificar colores, normales, materiales y texturas entre los llamados de glBegin() y glEnd().
Los vértices sumistrados entre los llamados del glBegin() – glEnd() pueden ser cualquiera de la forma:

void Vertex{234}{sifd}v( T coords );

que significa que pueden tener dos, tres o cuatro parámetros y ser entero corto, entero, flotante o doble, al mismo tiempo que pueden o no estar contenidos en un vector.

Es posible especificar diez tipos de primitivas diferentes al llamar la función glBegin(), estas son:

1. Puntos – glBegin(GL_POINTS);

Se dibuja un punto en las coordenadas especificadas y con el color actual por cada llamado a glVertex. Esta primitiva se ve afectada entre otras por las siguientes funciones:

void glPointSize( float size ); : Cambia el tamaño de los puntos en píxeles por size, el tamaño por defecto es 1.0. El tamaño de un punto varia con la distancia de a la cámara por lo que a mayor distancia se vera mas pequeño para dar un efecto de profundidad

Esta primitiva se ve afectada entre otros por este estado:

GL_POINT_SMOOTH : Indica si el punto debe se suavizado o no.

Ejemplo:

glPointSize(3.0f);
…
glBegin(GL_POINTS);
glVertex3f(1.0f,1.0,1.0);
glVertex2f(3.5f,1.0f);
glEnd();
…

Este código dibuja dos puntos, uno en (1,1,1) y (3.5,1,0), de tamaño 3 píxeles y con sus respectivas atenuaciones de tamaño, dependientes de la distancia a la cámara. A pesar de que el llamado de glBegin() no genera un bloque de código como los corchetes, es recomendable usar un espacio tabulado para indicar que esas líneas de código se encuentran entre el llamado a un glBegin() y un glEnd().

Debido a que hacer un ejemplo mostrando un punto en pantalla es bastante seco y aburrido, la aplicación que muestra el conjunto de puntos en forma de cilindro, utilizando las funciones seno y coseno para trazar la circunferencia e incrementando una variable de profundidad.

Ejemplo del tunel de puntos

download


Descargar:	puntos.zip
Version:	0.1
Actualizado:	December 22, 2009
Tamaño:		97.56 KB

El ejemplo de primitiva punto.

1 2 3 4

Compartir esta entrada

DiggReddit
  • Jonathan

    ¿Tendrá consecuencias ideológicas, formativas y sociales, la forma de pensar:

    “si luce bien, esta bien”

    ?

    Por cierto, la palabra “está” se acentúa.

  • nolasco

    bueno todo esta bonito
    pero me gustaria que sean mas orientaodos a los codigos bueno yo se mas o menos
    todo lo que e leido buneo ya lo sabia pero quisiera ssaber como dar movientos a cualquier objeto no sobre su propio eje ya sea y,x,z sino
    por ejeplo un carrito que avance en forma horizontal

  • http://black-byte.com/ jotatsu

    En el tutorial “Transformaciones en OpenGL encontrarás algo de información al respecto.

  • darkniel

    excelente trabajo, muy didactico, me sirvio de mucho, gracias

  • rojiza

    Hola
    Aqui les dejo un link donde encontrar algunos ejemplo de programas en opengl

    bueno ami me sirvieron.
    http://openglenc.es.tl

  • Yorjander

    muy buena la informaciu00f3n que se ha publicado, pero seru00eda mu00e1s interesante si pusieru00e1n mas ejemplos de cu00f3digo.