Hay algunas opciones Como método general, los búferes de plantilla a menudo son muy útiles cuando es necesario enmascarar ciertos dibujos, como el contorno donde los círculos se superponen en su ejemplo.
En este caso, creo que esto se puede hacer con la misma facilidad sin un búfer de plantilla. Puede usar el búfer de profundidad para eliminar el contorno donde se superponen los círculos. La idea es dibujar el interior de los círculos solo en el búfer de profundidad (ya que no queremos ver el interior) y luego dibujar el contorno. De esta manera, la parte del contorno que se superpone con otro círculo será eliminada por la prueba de profundidad.
La única advertencia es que debes tener cuidado con la lucha en profundidad. Puede usar un pequeño desplazamiento para asegurarse de que los contornos estén de hecho detrás del interior y que la prueba de profundidad los elimine. Una alternativa sería usar glPolygonOffset()
.
Digamos que tiene dos círculos que son paralelos al plano xy, con centros en (x1, y1, z) y (x2, y2, z). Y tiene estas funciones de dibujo:
// Draw interior part of circle, shown in green in the schematic in the question.
drawInterior(x, y, z);
// Draw outline of circle, shown in red in the schematic in the question.
drawOutline(x, y, z);
La secuencia de dibujo se ve así, con delta
un pequeño desplazamiento:
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
drawInterior(x1, y1, z + delta);
drawInterior(x2, y2, z + delta);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
drawOutline(x1, y1, z);
drawOutline(x2, y2, z);