आपके द्वारा पोस्ट किए गए shader कोड के आधार पर, आप UVs को कोने से प्रक्षेपित नहीं कर रहे हैं - बल्कि ऐसा प्रतीत होता है कि आप 3D स्थिति ( fragVert
) में इंटरपोल कर रहे हैं , फिर गोलाकार निर्देशांक में परिवर्तित करके UVs की गणना कर रहे हैं ।
आपका विश्लेषण इस बात में सही है कि एक छोटी सी गड़बड़ी को तब चुना जाता है जब कोई गड़बड़ी हो, क्योंकि मिममैप चयन डेरिवेटिव पर आधारित होता है जो पड़ोसी पिक्सल में उपयोग किए जाने वाले यूवी से संख्यात्मक रूप से अनुमानित होते हैं। जब एक पिक्सेल में u = 0 होता है और दूसरे में u = 1 होता है, तो आपको एक बहुत बड़ा व्युत्पन्न मिलता है। आपके प्रयास में ठीक यही समस्या है कि बड़े व्युत्पन्न u = 0.01 और u = 0.99 के आसपास होते हैं, यही वजह है कि मूल सीम जहां था, उसके दोनों तरफ दो सीम दिखाई देते हैं।
समस्या को ठीक करने के लिए एक अपेक्षाकृत सरल तरीका यह तय करना होगा कि कौन सा एमआईपी स्तर का उपयोग करें और textureLod
सीधे इसे नमूना करने के लिए कॉल करें । यदि ग्रह हमेशा कैमरे के काफी करीब होने वाला है, तो आप हार्ड लेवल को mip लेवल को 0 पर ले जा सकते हैं (या उस मामले के लिए, बस बनावट में एमआईपी के स्तर को शामिल न करें)। अन्यथा, यह कैमरे से बिंदु की दूरी के लॉग 2 पर आधारित हो सकता है, कुछ उपयुक्त कारकों द्वारा बढ़ाया जा सकता है। ध्यान दें कि यह अनीसोट्रोपिक फ़िल्टरिंग को प्रभावी रूप से अक्षम कर देगा।
एक अधिक "सही" दृष्टिकोण कुछ उच्च-गुणवत्ता वाले डेरिवेटिव की गणना करना होगा। इसके बजाय का उपयोग करने का dFdx
और dFdy
यूवी, जिसकी वजह से discontinuities है पर atan2
, आप लागू हो सकते हैं dFdx
और dFdy
करने के लिए fragVert
(जो क्षेत्र के आसपास सभी तरह निरंतर हो जाएगा), तो कुछ पथरी (श्रृंखला नियम) का उपयोग यूवी डेरिवेटिव प्राप्त करने के लिए सूत्र खोजने के लिए स्थिति डेरिवेटिव से। यह अधिक जटिल और धीमा होगा, लेकिन इसका लाभ यह है कि एनिसोट्रोपिक फ़िल्टरिंग को काम करना चाहिए।
अंत में, चूंकि आप OpenGL के लिए नए हैं, तो मैं सिर्फ इस बात पर ध्यान दूंगा कि गोलाकार निर्देशांक से UV की गणना करते समय एक गोले को बनावट के लिए एक पूरी तरह से मान्य तरीका है, यह "सामान्य" तरीका नहीं है जो ज्यादातर लोग उठाते हैं। यह एक गोलाकार जाल का निर्माण करने के लिए अधिक सामान्य है जिसमें यूवी प्रति वर्टेक्स निर्दिष्ट किया गया है, और सिर्फ़ शीर्ष शेल्डर से पिक्सेल शेडर (प्रत्येक त्रिभुज में रैखिक रूप से प्रक्षेपित) से पारित किया गया है। सीम के साथ वर्टीकल को इस तरह रखा जाता है , जैसे कि प्रत्येक वर्टेक्स की दो प्रतियां होती हैं, बिल्कुल उसी स्थिति में, लेकिन आधा u = 0 के साथ एक तरफ त्रिकोण से जुड़ा होता है, और दूसरा आधा u = 1 के साथ जुड़ा होता है दूसरी तरफ त्रिकोण। यह किसी भी दृश्यमान सीम को समाप्त कर देता है और पिक्सेल शेडर में किसी भी चाल की आवश्यकता नहीं होती है।