มีตัวเลือกน้อย ตามวิธีการทั่วไปบัฟเฟอร์ลายฉลุมักจะมีประโยชน์มากในกรณีที่การวาดภาพบางอย่างจำเป็นต้องถูกปกปิดเช่นโครงร่างที่วงกลมซ้อนทับในตัวอย่างของคุณ
ในกรณีนี้ฉันคิดว่าสิ่งนี้สามารถทำได้อย่างง่ายดายโดยไม่ต้องมี stencil buffer คุณสามารถใช้บัฟเฟอร์ความลึกเพื่อกำจัดโครงร่างที่วงกลมซ้อนทับกัน แนวคิดคือคุณวาดการตกแต่งภายในของวงกลมเป็นเพียงบัฟเฟอร์ความลึก (เนื่องจากเราไม่ต้องการเห็นการตกแต่งภายใน) จากนั้นจึงวาดโครงร่าง ด้วยวิธีนี้ส่วนของโครงร่างที่ทับซ้อนกับวงกลมอื่นจะถูกกำจัดโดยการทดสอบความลึก
ข้อแม้เดียวคือคุณต้องระวังเกี่ยวกับการต่อสู้เชิงลึก คุณสามารถใช้ออฟเซ็ตขนาดเล็กเพื่อให้แน่ใจว่าโครงร่างนั้นอยู่ด้านหลังการตกแต่งภายในและกำจัดโดยการทดสอบความลึก อีกทางเลือกหนึ่งคือการใช้glPolygonOffset()
ทางเลือกที่จะใช้
สมมติว่าคุณมีวงกลมสองวงที่ขนานกับระนาบ xy โดยมีศูนย์กลางที่ (x1, y1, z) และ (x2, y2, z) และคุณมีฟังก์ชั่นการวาดเหล่านี้:
// 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);
ลำดับของการวาดภาพจะมีลักษณะเช่นนี้โดยมีdelta
การชดเชยเล็กน้อย:
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);