मेरे पास एक 2D गेम इंजन है जो एक टाइलसेट इमेज से टाइलें खींचकर टिलमैप्स बनाता है। क्योंकि डिफ़ॉल्ट रूप से ओपनजीएल केवल पूरी बनावट ( GL_REPEAT
) को लपेट सकता है , और केवल इसका हिस्सा नहीं है, प्रत्येक टाइल को अलग बनावट में विभाजित किया जाता है। फिर एक ही टाइल के क्षेत्र एक दूसरे से सटे हुए हैं। जब यह इरादा के अनुसार काम कर रहा हो तो यह कैसा दिखता है:
हालांकि जैसे ही आप भिन्नात्मक स्केलिंग शुरू करते हैं, सीम दिखाई देते हैं:
ऐसा क्यों होता है? मुझे लगा कि यह रैखिक फ़िल्टरिंग के कारण क्वैड्स की सीमाओं को मिश्रित कर रहा है, लेकिन यह अभी भी पॉइंट फ़िल्टरिंग के साथ होता है। एकमात्र समाधान जो मैंने अब तक पाया है, यह सुनिश्चित करने के लिए है कि सभी स्थिति और स्केलिंग पूर्णांक मानों पर ही होती है, और बिंदु फ़िल्टरिंग का उपयोग करना है। यह खेल की दृश्य गुणवत्ता को ख़राब कर सकता है (विशेष रूप से कि उप-पिक्सेल स्थिति अब काम नहीं करती है इसलिए गति इतनी चिकनी नहीं है)।
जिन चीजों की मैंने कोशिश की है / जिन पर विचार किया है:
- एंटीएलियासिंग कम कर देता है, लेकिन पूरी तरह से खत्म नहीं करता है, सीम
- Mipmapping बंद करने से कोई प्रभाव नहीं पड़ता है
- प्रत्येक टाइल को व्यक्तिगत रूप से रेंडर करें और किनारों को 1px से बढ़ाएं - लेकिन यह एक डी-ऑप्टिमाइज़ेशन है, क्योंकि यह अब टाइलों के क्षेत्रों को एक बार में प्रस्तुत नहीं कर सकता है, और पारदर्शिता के क्षेत्रों के किनारों के साथ अन्य कलाकृतियों का निर्माण करता है।
- स्रोत छवियों के चारों ओर 1px की सीमा जोड़ें और अंतिम पिक्सल को दोहराएं - लेकिन फिर वे पावर-ऑफ-टू नहीं हैं, जिससे एनपीओटी समर्थन के बिना सिस्टम के साथ संगतता समस्याएं हो सकती हैं
- टाइल वाली छवियों को संभालने के लिए एक कस्टम shader लिखना - लेकिन फिर आप अलग तरीके से क्या करेंगे?
GL_REPEAT
सीमाओं पर छवि के विपरीत पक्ष से पिक्सेल को हथियाना चाहिए, और पारदर्शिता नहीं लेनी चाहिए। - ज्यामिति बिलकुल समीप है, कोई अस्थायी बिंदु नहीं है, जो गोल-गोल त्रुटी है।
- अगर एक ही रंग को वापस करने के लिए टुकड़े टुकड़े करना कठिन कोडित किया जाता है, तो सीम गायब हो जाते हैं ।
- यदि
GL_CLAMP
इसके बजाय बनावट सेट की जाती हैGL_REPEAT
, तो सीम गायब हो जाते हैं (हालांकि प्रतिपादन गलत है)। - यदि पाठ सेट किए जाते हैं
GL_MIRRORED_REPEAT
, तो सीम गायब हो जाते हैं (हालांकि रेंडरिंग फिर से गलत है)। - यदि मैं पृष्ठभूमि को लाल बनाता हूं, तो सीम अभी भी सफेद हैं। इससे पता चलता है कि यह पारदर्शिता के बजाय कहीं से अपारदर्शी सफेद नमूना ले रहा है।
इसलिए सीम GL_REPEAT
सेट होने पर ही दिखाई देते हैं । केवल इस मोड में किसी कारण से, ज्यामिति के किनारों पर कुछ ब्लीड / लीकेज / पारदर्शिता है। ऐसे कैसे हो सकता है? संपूर्ण बनावट अपारदर्शी है।
GL_NEAREST
में नमूने के साथ 3 डी बनावट R
भी इस परिदृश्य में ज्यादातर चीजों के लिए सिर्फ सरणी बनावट के रूप में अच्छी तरह से काम करते हैं। Mipmapping काम नहीं करने वाला है, लेकिन आपके आवेदन को देखते हुए, आपको शायद किसी भी तरह mipmaps की आवश्यकता नहीं है।