next up previous contents
Next: Simple Up: Polígonos Previous: Clasificación


Polígonos de OpenGL

OpenGL maneja polígonos correctamente siempre y cuando sean simples y convexos. Si ese no es el caso, OpenGL dibuja cosas raras.

Además en algunas ocasiónes se quiere especificar el vector normal del plano en el cual se encuentra el polígono. Dicho vector normal se necesita p.e. para algoritmos de visualización avanzada (``Phong shading'').

Cuando se escriben aplicaciones gráficas nos enfrentamos con el problema siguiente: desde alguna fuente ``vienen'' listas de puntos (o bién de otro programa, o bién de un fichero, o bién de modo interactivo) y hay que interpretar las listas como polígonos, es decir, hay que verificar si las listas cumplen la definición de especificar polígonos simples y convexos. Si ese no es el caso, a lo mejor se pueden ``corregir'' las listas. (Programas con tal propriedades se llama robustos y tolerantes.)

Entonces (en el caso de mera visualización con OpenGL):

  1. Se puede eliminar puntos múltiples consecutivos en la lista.
  2. Se puede intentar calcular el plano en el cual se encuentran más o menos los puntos del polígono (eso no es tam trivial).
  3. En dicho plano, es decir, una vez corregidos los puntos hasta que se encuentren exactamente en el plano, se puede verificar si el polígono es simple y convexo (eso es algo bastante fácil).
  4. Si no es así, se podría subdividir el polígono en partes simples y convexos para seguir trabajando después con las partes sin problemas (este paso no lo vamos a realizar en estas prácticas).

Antes de dedicarnos a los detalles, dibujamos polígonos con OpenGL asumiendo que la lista de puntos cumple la definición.

Siempre que se quiera dibujar un objeto de OpenGL (en este caso unos polígonos, antes vimos puntos y segmentos), hay que decírselo de antemano con la función

glBegin()

La lista de puntos se define con consecutivas llamadas a

glVertex*()

y se termina el trabajo con

glEnd()

En lugar de dibujar polígonos rellenados, OpenGL puede dibujar, o bién solo las esquinas o bién solo los segmentos del borde. Eso se realiza con la función

glPolygonMode()

a la cual hay que pasar también cuál de las dos posibles caras del polígono se quiere pintar.

Además se pueden llenar los polígonos con patrones que no detallamos por el momento.

glEnable()
glPolygonStipple()


next up previous contents
Next: Simple Up: Polígonos Previous: Clasificación
© 2003, Dr. Arno Formella & Dra. Mª Victoria Luzón García, Universidad de Vigo, Departamento de Informática