कुछ विकल्प हैं। एक सामान्य विधि के रूप में, स्टैंसिल बफ़र अक्सर बहुत काम आते हैं जहां कुछ ड्राइंग को बाहर निकालने की आवश्यकता होती है, जैसे कि रूपरेखा जहां आपके उदाहरण में सर्कल ओवरलैप होते हैं।
इस मामले में, मुझे लगता है कि यह स्टैंसिल बफर के बिना आसानी से किया जा सकता है। आप सर्कल को ओवरलैप करने की रूपरेखा को समाप्त करने के लिए गहराई बफर का उपयोग कर सकते हैं। विचार यह है कि आप मंडलियों के आंतरिक भाग को केवल गहराई बफर में खींचते हैं (क्योंकि हम इंटीरियर नहीं देखना चाहते हैं), और फिर रूपरेखा तैयार करें। इस तरह, एक और सर्कल के साथ ओवरलैप होने वाली रूपरेखा का हिस्सा गहराई परीक्षण द्वारा समाप्त हो जाएगा।
एकमात्र चेतावनी यह है कि आपको गहराई से लड़ने के बारे में सावधान रहना होगा। आप यह सुनिश्चित करने के लिए एक छोटी सी ऑफसेट का उपयोग कर सकते हैं कि रूपरेखा वास्तव में इंटीरियर के पीछे है, और गहराई परीक्षण द्वारा समाप्त हो जाती है। एक विकल्प का उपयोग करना होगा glPolygonOffset()
।
मान लें कि आपके पास दो वृत्त हैं जो xy-plane के समानांतर हैं, (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);