Sei sulla pagina 1di 2

15.

1 Líneas ocultas

Esta técnica le permite dibujar objetos de estructura metálica con las líneas
ocultas eliminadas, o dibujadas en un estilo diferente de los que son
visibles. Esta técnica puede aclarar dibujos lineales complejos de objetos y
mejorar su apariencia.

El algoritmo supone que el objeto está compuesto de polígonos. El algoritmo


primero representa los polígonos de los objetos, luego los bordes mismos, que
forman el dibujo lineal. Durante la primera pasada, solo se actualiza el búfer
de profundidad. Durante la segunda pasada, el búfer de profundidad solo
permite renderizar bordes que no están oscurecidos por los polígonos de los
objetos.

Aquí está el algoritmo en detalle:

1. Deshabilite la escritura en el búfer de color con glColorMask ()


2. Habilite las pruebas de profundidad
con GLEnable GL_DEPTH_TEST ( GL_DEPTH_TEST )
3. Renderiza el objeto como polígonos
4. Habilitar la escritura en el búfer de color
5. Renderiza el objeto como bordes

Con el fin de mejorar la apariencia de los bordes (que pueden mostrar


artefactos de alias de amortiguación de profundidad), utilice técnicas de
desplazamiento de polígono o de desglose de plantilla para dibujar los bordes
del polígono. La siguiente técnica funciona bien, aunque no es completamente
general. Use el búfer de plantilla para enmascarar dónde están todas las líneas,
tanto ocultas como visibles. Luego, use la función de plantilla para evitar que
la representación del polígono actualice el búfer de profundidad donde se han
establecido los valores de la plantilla. Cuando se representan las líneas
visibles, no hay conflicto de valores de profundidad, ya que los polígonos
nunca tocaron esos píxeles.

Aquí está el algoritmo modificado:

1. Deshabilite la escritura en el búfer de color con glColorMask ()


2. Desactivar pruebas de
profundidad; glDisable GL_DEPTH_TEST ( GL_DEPTH_TEST )
3. Habilitar plantillas; GLEnable GL_STENCIL_TEST ( GL_STENCIL_TEST )
4. Borrar el búfer de la plantilla
5. Establezca el búfer de la plantilla para establecer los valores de la
plantilla en 1 donde se dibujan los píxeles; glStencilFunc GL_ALWAYS ,
1, 1 ( GL_ALWAYS , 1,
1) ; glStencilOp GL_KEEP , GL_KEEP , GL_REPLACE ( GL_KEEP , GL_KEE
P , GL_REPLACE )
6. Renderiza el objeto como bordes
7. Use el búfer de la plantilla para enmascarar píxeles donde el valor de
la plantilla es 1; glStencilFunc GL_EQUAL , 1, 1 ( GL_EQUAL , 1,
1) y glStencilOp GL_KEEP , GL_KEEP , GL_KEEP ( GL_KEEP , GL_KEEP
, GL_KEEP )
8. Renderiza el objeto como polígonos
9. Desactive la creación
de plantillas glDisable GL_STENCIL_TEST ( GL_STENCIL_TEST )
10. Habilitar la escritura en el búfer de color
11. Renderiza el objeto como bordes

El único problema con este algoritmo es si las líneas ocultas y visibles no son
todas del mismo color o interpolan colores entre puntos finales. En este caso,
es posible que una línea oculta y visible se superponga, en cuyo caso la línea
más reciente será la que se dibuja.

En lugar de eliminar líneas ocultas, a veces es conveniente renderizarlas con


un color o patrón diferente. Esto se puede hacer con una modificación del
algoritmo:

1. Deje el búfer de profundidad de color habilitado para escribir


2. Establezca el color y / o patrón que desee para las líneas ocultas
3. Renderiza el objeto como bordes
4. Desactiva la escritura en el búfer de color
5. Renderiza el objeto como polígonos
6. Establezca el color y / o patrón que desee para las líneas visibles
7. Renderiza el objeto como bordes

En esta técnica, todos los bordes se dibujan dos veces; primero con el patrón
de línea oculta, luego con el visible. Renderizar el objeto como polígonos
actualiza el búfer de profundidad, evitando que el segundo paso del dibujo de
línea afecte las líneas ocultas.

Potrebbero piacerti anche