Birkaç seçenek var. Genel bir yöntem olarak, şablon arabellekleri, örneğin örnekte dairelerin üst üste geldiği anahat gibi, belirli çizimin maskelenmesi gereken yerlerde genellikle çok kullanışlıdır.
Bu durumda, bunun bir şablon tamponu olmadan kolayca yapılabileceğini düşünüyorum. Dairelerin çakıştığı anahatları ortadan kaldırmak için derinlik arabelleğini kullanabilirsiniz. Fikir, dairelerin iç kısmını sadece derinlik tamponuna çizmeniz (iç kısmı görmek istemediğimizden) ve ardından anahattı çizmenizdir. Bu şekilde, anahattın başka bir daireyle çakışan kısmı derinlik testi ile ortadan kaldırılacaktır.
Tek uyarı, derinlik savaşları konusunda dikkatli olmanız gerektiğidir. Ana hatların aslında iç mekanın arkasında olduğundan emin olmak ve derinlik testi ile ortadan kaldırmak için küçük bir ofset kullanabilirsiniz. Bir alternatif kullanmak olacaktır glPolygonOffset()
.
Diyelim ki xy düzlemine paralel iki merkeziniz var, merkezleri (x1, y1, z) ve (x2, y2, z). Ve şu çizim fonksiyonlarına sahipsiniz:
// 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);
Çizim sırası daha sonra delta
küçük bir ofset olmak üzere şöyle görünür :
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);