Compartir a través de


Polígonos teselantes

OpenGL solo puede mostrar directamente polígonos convex simples. Un polígono es sencillo si:

  • Los bordes solo se cruzan en vértices.
  • No hay vértices duplicados.
  • Exactamente dos bordes se encuentran en cualquier vértice.

Para mostrar polígonos simples no convexas o polígonos simples que contengan agujeros, primero debe triangular los polígonos (subdividirlos en polígonos convex). Dicha subdivisión se denomina teselación. GLU proporciona una colección de funciones que realizan teselación. Tenga en cuenta que las funciones de teselación GLU no pueden controlar polígonos nomples; no hay ningún método OpenGL estándar para controlar dichos polígonos.

Dado que la teselación suele ser necesaria y puede ser bastante complicada, en esta sección se describen detalladamente las funciones de teselación GLU. Estas funciones toman como polígonos simples de entrada arbitrarios que pueden incluir agujeros y devuelven alguna combinación de triángulos, mallas de triángulos y ventiladores de triángulos. Si no desea tratar con mallas o ventiladores, puede especificar que las funciones de teselación devuelvan solo triángulos. Sin embargo, la información de malla y ventilador mejora el rendimiento. La teselación de polígonos funciona triangulando un polígono concavo con uno o varios contornos.

Para usar teselación de polígonos

  1. Cree un objeto de teselación con gluNewTess.

  2. Use gluTessCallBack para definir funciones de devolución de llamada que usará para procesar los triángulos generados por el teselador.

  3. Con gluBeginPolygon, gluTessVertex, gluNextContour y gluEndPolygon, especifique el polígono con agujeros o el polígono concave que se va a teselar.

    Una vez completada la descripción del polígono, la instalación de teselación invoca las funciones de devolución de llamada según sea necesario.

    Puede destruir objetos de teselación innecesarios con gluDeleteTess.

Para obtener más información sobre cómo guardar los datos de teselación, vea Uso de funciones de devolución de llamada.