Ada beberapa opsi. Sebagai metode umum, buffer stensil sering kali menjadi sangat berguna di mana gambar tertentu perlu ditutup, seperti garis besar di mana lingkaran tumpang tindih dalam contoh Anda.
Dalam hal ini, saya pikir ini dapat dilakukan dengan mudah tanpa buffer stensil. Anda dapat menggunakan buffer kedalaman untuk menghilangkan garis besar di mana lingkaran tumpang tindih. Idenya adalah bahwa Anda menggambar interior lingkaran menjadi hanya penyangga kedalaman (karena kita tidak ingin melihat interior), dan kemudian menggambar garis besarnya. Dengan cara ini, bagian garis besar yang tumpang tindih dengan lingkaran lain akan dihilangkan dengan uji kedalaman.
Satu-satunya peringatan adalah bahwa Anda harus berhati-hati tentang pertempuran mendalam. Anda dapat menggunakan offset kecil untuk memastikan bahwa garis sebenarnya berada di belakang interior, dan dihilangkan dengan uji kedalaman. Alternatifnya adalah menggunakan glPolygonOffset()
.
Katakanlah Anda memiliki dua lingkaran yang sejajar dengan bidang xy, dengan pusat di (x1, y1, z) dan (x2, y2, z). Dan Anda memiliki fungsi menggambar ini:
// 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);
Urutan gambar kemudian terlihat seperti ini, dengan delta
menjadi offset kecil:
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);