কয়েকটি অপশন আছে। একটি সাধারণ পদ্ধতি হিসাবে, স্টেনসিল বাফারগুলি প্রায়শই খুব কার্যকরী হয় যেখানে নির্দিষ্ট অঙ্কনটি মুখোশ করা দরকার যেমন বাহ্যরেখা যেখানে আপনার উদাহরণে চেনাশোনাগুলি ওভারল্যাপ হয়।
এই ক্ষেত্রে, আমি মনে করি এটি স্টেনসিল বাফার ছাড়াই ঠিক সহজেই করা যায়। চেনাশোনাগুলি ওভারল্যাপ করে এমন রূপরেখাটি দূর করতে আপনি গভীরতা বাফারটি ব্যবহার করতে পারেন। ধারণাটি হ'ল আপনি চেনাশোনাগুলির অভ্যন্তরটি কেবল গভীরতা বাফারে আঁকুন (যেহেতু আমরা অভ্যন্তরটি দেখতে চাই না) এবং তারপরে রূপরেখাটি আঁকুন। এই রূপরেখার যে অংশটি অন্য একটি বৃত্তের সাথে ওভারল্যাপ করে সেগুলি গভীরতা পরীক্ষা করে মুছে ফেলা হবে।
একমাত্র সতর্কতা হ'ল গভীর লড়াইয়ের বিষয়ে আপনাকে সতর্ক থাকতে হবে। অভ্যন্তরের পিছনে যে রূপরেখাটি প্রকৃতপক্ষে রয়েছে তা নিশ্চিত করার জন্য আপনি একটি ছোট অফসেট ব্যবহার করতে পারেন এবং গভীরতা পরীক্ষা দ্বারা মুছে ফেলা হবে। একটি বিকল্প ব্যবহার করা হবে glPolygonOffset()
।
ধরা যাক যে আপনার দুটি বৃত্ত রয়েছে যা xy- সমতলের সমান্তরাল, কেন্দ্রগুলি (x1, y1, z) এবং (x2, y2, z) সহ with এবং আপনার এই আঁকার কাজগুলি:
// 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);