मैं अपने 3 डी इंजन में एक सक्रिय रूपरेखा स्थापित करने पर काम कर रहा हूं, स्क्रीन में चयनित 3 डी पात्रों या दृश्यों के लिए एक हाइलाइट प्रभाव। स्टैंसिल बफर के साथ काम करने और कुछ असंतोषजनक परिणाम (अवतल आकृतियों के साथ मुद्दे, कैमरे से दूरी के कारण रूपरेखा, और मेरे डेस्कटॉप और लैपटॉप के बीच असंगतताएं) के बाद, मैंने किनारे का पता लगाने और बफर के नमूने को स्विच किया और एक रूपरेखा प्राप्त की। से बहुत संतुष्ट हैं।
हालांकि, मैं रूपरेखा को छिपाने में सक्षम नहीं हूं जब चयनित जाल दूसरे जाल के पीछे हो। यह मेरी प्रक्रिया को देखते हुए समझ में आता है, क्योंकि मैं केवल दृश्य के बाकी हिस्सों को प्रस्तुत करने के बाद एक फ्रेम बफर से 2d shader रूपरेखा प्रस्तुत करता हूं।
मेरे परिणामों के दो स्क्रीन कैप्चर नीचे हैं। पहली एक "अच्छी" रूपरेखा है, दूसरी वह जगह है जहां रूपरेखा एक जाल पर देखी जाती है जो रूपरेखा स्रोत को अवरुद्ध करती है।
रेंडरिंग प्रक्रिया इस तरह से चलती है: 1) हाइलाइट की गई जाली के केवल अल्फा को ड्रा करें, एक ब्लैक सिल्हूट को एक फ्रेम बफर (फ्रेमबफ़र 1) में कैप्चर करें।
2) फ़्रेमबफ़र 1 से दूसरे शेडर की बनावट को पास करें जो किनारे का पता लगाने का काम करता है। फ्रेमबीयर 2 में बढ़त पर कब्जा।
3) पूरे दृश्य को प्रस्तुत करें।
4) दृश्य के शीर्ष पर framebuffer2 से बनावट को प्रस्तुत करना।
मेरे पास कुछ विचार हैं कि कैसे पूरा करें और उनकी वैधता, या सरल या बेहतर तरीकों पर प्रतिक्रिया प्राप्त करने की उम्मीद कर रहा हूं।
सबसे पहले, मैंने पूरे दृश्य को एक फ्रेम बफर में रेंडर करने और अल्फा चैनल में हाइलाइटेड मेष के दृश्य सिल्हूट को स्टोर करने के बारे में सोचा है (सभी सफेद सेव जहां हाइलाइटेड मेष दिखाई देता है)। मैं तब अल्फा चैनल पर एज डिटेक्शन परफॉर्म करता हूं, सीन फ्रेम बफर को रेंडर करता हूं और फिर एज को टॉप पर रेंडर करता हूं। कुछ इस तरह से परिणाम:
इसे पूरा करने के लिए, मैंने हाइलाइट किए गए ऑब्जेक्ट के रेंडर पास के दौरान केवल एक परिभाषित करने की सोची, जो किसी भी दृश्यमान पिक्सेल के लिए अल्फा में सभी काले रंग को आकर्षित करेगा।
मेरा दूसरा विचार ऊपर उल्लिखित वर्तमान रेंडर प्रक्रिया का उपयोग करना है, लेकिन चयनित मेष के सिल्हूट को प्रस्तुत करते समय फ्रेमबफ़र 1 के आर, जी और बी चैनलों में एक्स, वाई और जेड निर्देशांक को भी स्टोर करना है। एज डिटेक्शन का प्रदर्शन किया जाएगा और उन्हें फ्रेमबफ़र 2 में संग्रहीत किया जाएगा, लेकिन मैं अल्फा के किनारों से सिल्हूट तक आरजीबी / एक्सवाईजेड मूल्यों पर पास करूंगा। फिर, जब दृश्य प्रदान करते हैं, तो मैं यह जांच करूंगा कि निर्देशांक फ्रेमबफ़र 2 में संग्रहीत किनारे के भीतर है या नहीं। यदि हां, तो मैं आरजीबी चैनलों (कैमरा स्थान में परिवर्तित) से निकाले गए निर्देशांक के सामने या पीछे यह निर्धारित करने के लिए वर्तमान टुकड़े की गहराई का परीक्षण करूंगा। यदि टुकड़ा गहराई के निर्देशांक के सामने है, तो टुकड़ा सामान्य रूप से प्रस्तुत किया जाएगा। यदि टुकड़ा पीछे है, तो इसे ठोस रूपरेखा रंग के रूप में प्रस्तुत किया जाएगा।
मैं इस परियोजना के लिए LibGDX का उपयोग कर रहा हूं और WebGL और OpenGL ES का समर्थन करना चाहूंगा, इसलिए ज्यामिति शेड या नए GLSL फ़ंक्शन से जुड़े कोई भी समाधान मेरे लिए उपलब्ध नहीं हैं। अगर कोई मेरे प्रस्तावित दृष्टिकोण पर टिप्पणी कर सकता है या कुछ बेहतर प्रस्तावित कर सकता है तो मैं वास्तव में इसकी सराहना करूंगा।