इस प्रकार की समस्या के दो संभावित कारण हैं, यह वास्तव में किस समस्या पर निर्भर करता है। मैं दोनों की सूची दूंगा:
1. आप टाइल्स के किनारों के साथ अपनी बनावट से अन्य रंगों को देख रहे हैं।
यह मुझे इस मामले में समस्या की तरह लग रहा है, क्योंकि सभी किनारे के पिक्सल तीन रंगों में से एक हैं जो आपकी बनावट में काफी हैं: सफेद, काला और भूरा।
यदि आप एक ही बनावट (एक बनावट एटलस) में एक-दूसरे के ठीक बगल में कई टाइल की छवियों का उपयोग कर रहे हैं, जैसा कि मैं मानता हूं कि आप कर रहे हैं, तो यह अपरिहार्य है। यह तब होता है क्योंकि GPU पूरी तरह से एक त्रिकोण के किनारे पर बनावट के साथ प्रक्षेप के साथ मेल नहीं खाता है, और आपको आसन्न बनावट के छोटे टुकड़े मिलते हैं।
कई चीजें हैं जो आप कर सकते हैं।
- एक बनावट एटलस के बजाय एक सरणी बनावट का उपयोग करें । एक सरणी बनावट एक ही आकार के 2 डी छवियों के ढेर से बना है, और आप एक का चयन करने के लिए एक तीसरा समन्वय निर्दिष्ट करते हैं; यह वास्तव में फ़िल्टरिंग समस्या के बिना बनावट atlases के प्रतिस्थापन के रूप में करना है। हालाँकि, सरणी बनावट एक नई सुविधा है जिसका उपयोग आप OpenGL के संस्करण में नहीं कर सकते हैं।
- अपनी प्रत्येक बनावट टाइल में 1-पिक्सेल बॉर्डर बनाएं, जो आसन्न नियमित पिक्सेल के रंग को दोहराता है। (यह अनिवार्य रूप से जीएल के पुन: क्रियान्वयन है
CLAMP[_TO_EDGE]
, लेकिन एक तरह से जो बनावट atlases के बारे में जानते हैं - आपके उपयोग का कोई प्रभाव नहीं है क्योंकि आपके अधिकांश टाइल किनारे बनावट के किनारे पर नहीं हैं।) यह वह समाधान है जिसका उपयोग मैं अपनी प्रविष्टि में करता हूं। शैली में, क्यूब्स । मुझे कोई विशेष नुकसान नहीं है सिवाय इसके कि यह अधिक बनावट स्मृति का उपयोग करता है।
- बहुत थोड़ा इनसेट आपकी बनावट को समन्वयित करता है, जिससे वे बनावट टाइल के किनारे तक नहीं जाते हैं। इसे बहुत अधिक करने से बीच के पिक्सल की तुलना में बनावट के किनारों का ध्यान देने योग्य पतलापन होगा।
- प्रति टाइल प्रकार एक एकल बनावट का उपयोग करें। यह बनावट-स्विचिंग लागत लगाता है।
2. आप टाइल्स के बीच अंतराल के माध्यम से देख रहे हैं।
मुझे नहीं लगता कि इस मामले में यह समस्या है, क्योंकि अंतराल के माध्यम से कोई हरा मैदान नहीं देखा गया है, लेकिन मैं इसे पूर्णता के लिए शामिल कर रहा हूं।
यह तब हो सकता है जब आप प्रदान नहीं कर रहे वास्तव में आसन्न टाइल्स की बैठक किनारों, जो आमतौर पर फ्लोटिंग प्वाइंट त्रुटि के कारण पैदा होती है के कोने के लिए एक ही निर्देशांक। उदाहरण के लिए, आप आकार 0.6 की टाइल्स अगर और कम से टाइल के दाएं किनारे की गणना x=100
के साथ (100*0.6) + 0.6
, और कम से टाइल के बाईं बढ़त x=101
के साथ (100*0.6)
, आप ठीक उसी जवाब नहीं मिल जाएगा, और अंतर के छोटे specks के रूप में देखा जा सकता है अंतराल।
समाधान यह सुनिश्चित करना है कि आपका अंकगणित सुसंगत है; ऐसा करने के कुछ तरीके हैं:
- सुनिश्चित करें कि आप (अप्रत्यक्ष रूप से) कंप्यूटिंग नहीं हैं
index*size + size
, लेकिन केवल (index+1)*size
।
- सुनिश्चित करें कि आपका अंकगणित सटीक है; इसका सबसे आसान तरीका यह है कि आपके टाइल का आकार ठीक 1.0 बनाया जाए, जिसके परिणामस्वरूप सटीक पूर्णांक अंकगणित होगा, भले ही आप अपनी गणना 32-बिट फ़्लोट्स (मूल से 16 मिलियन ब्लॉक, वैसे भी) के साथ करें।
- शीर्ष समन्वय गणना के लिए वास्तविक पूर्णांक का उपयोग करें; यह आपको और भी अधिक रेंज में मिलता है।