Il y a quelques options. En tant que méthode générale, les tampons de pochoir sont souvent très utiles lorsque certains dessins doivent être masqués, comme le contour où les cercles se chevauchent dans votre exemple.
Dans ce cas, je pense que cela peut être fait tout aussi facilement sans tampon de gabarit. Vous pouvez utiliser le tampon de profondeur pour éliminer le contour là où les cercles se chevauchent. L'idée est que vous dessinez l'intérieur des cercles uniquement dans le tampon de profondeur (car nous ne voulons pas voir l'intérieur), puis dessinez le contour. De cette façon, la partie du contour qui chevauche un autre cercle sera éliminée par le test de profondeur.
La seule mise en garde est que vous devez faire attention aux combats en profondeur. Vous pouvez utiliser un petit décalage pour vous assurer que les contours sont bien derrière l'intérieur et qu'ils sont éliminés par le test de profondeur. Une alternative serait d'utiliser glPolygonOffset()
.
Disons que vous avez deux cercles parallèles au plan xy, avec des centres à (x1, y1, z) et (x2, y2, z). Et vous avez ces fonctions de dessin:
// 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 séquence de dessin ressemble alors à ceci, avec delta
un petit décalage:
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);