स्काईबॉक्स बनावट विरूपण साक्ष्य


12

मुझे मैक पर स्काईबॉक्स बनावट खींचने में अजीब समस्या है। IPhone पर सब कुछ ठीक चल रहा है। मैंने बिना किसी सफलता के पास और दूर के विमानों के मूल्य को बदलने की कोशिश की है।

यह छह बनावट का एक स्काईबॉक्स है, और हर बनावट के लिए मैंने इसे सेट किया है:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

क्या समस्या हो सकती है?

स्क्रीनशॉट:

दिखाई देने वाले स्काईबॉक्स के किनारों के साथ आकाश की छवि

संपादित करें:

मैंने पृष्ठभूमि के रंग को लाल करने की कोशिश की है, यह सुनिश्चित करने के लिए कि क्या यह बनावट के माध्यम से खून बह रहा है

मैंने इसकी बनावट के कोर्ड को भी बदलने की कोशिश की है:

float err_corr = 0.5 / TEXTURE_SIZE;

GLfloat vertices[24] = {    
        -1.0f - err_corr, -1.0f - err_corr,  1.0f + err_corr,
    1.0f + err_corr, -1.0f - err_corr,  1.0f + err_corr,
    -1.0f - err_corr,  1.0f + err_corr,  1.0f + err_corr,
    1.0f + err_corr,  1.0f + err_corr,  1.0f + err_corr,
    -1.0f - err_corr, -1.0f - err_corr, -1.0f - err_corr,
    1.0f + err_corr, -1.0f - err_corr, -1.0f - err_corr,
    -1.0f - err_corr,  1.0f + err_corr, -1.0f - err_corr,
    1.0f + err_corr,  1.0f + err_corr, -1.0f - err_corr,
    };

और इस क्रम में बॉक्स तैयार किया गया है:
GLubyte indices[14] = {0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1};

उपाय:

समाधान के लिए GL_CLAMP_TO_EDGE को क्यूबैप के लिए सेट करना है!

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

जवाबों:


8

क्या आप सकारात्मक हैं कि आपने प्रत्येक व्यक्तिगत बनावट के लिए GL_CLAMP_TO_EDGE सेट किया है ? यह अलग-अलग बनावट की स्थिति का एक हिस्सा है और यह GL_REPEAT के लिए डिफॉल्ट करता है, इसलिए glBindTexture के साथ बाध्यकारी होने के बाद ऐसा करने की आवश्यकता है। मुझे पता है कि मूल पोस्ट में आप सचमुच कहते हैं कि आपने इसे प्रत्येक बनावट के लिए सेट किया है, लेकिन मैं सोच रहा हूं कि कोड वास्तव में कैसा दिखता है?

उदाहरण के लिए:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glBindTexture(GL_TEXTURE_2D, tex1);
//upload texture, etc.

glBindTexture(GL_TEXTURE_2D, tex2);
//upload texture, etc.

यह समान नहीं है:

glBindTexture(GL_TEXTURE_2D, tex1);
//upload texture, etc.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glBindTexture(GL_TEXTURE_2D, tex2);
//upload texture, etc.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

मुझे त्रुटि मिल गई है! क्यूब मैप की हर बनावट के लिए GLBCLAMP_TO_EDGE सेट करना ज़रूरी नहीं था, बल्कि क्यूबैप के लिए ही आवश्यक था! glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);औरglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
मार्टिन पायलट

1

इनसेट 'बनावट की बाईं और दाईं ओर से 0.5 एफ / बनावट_ एक्सपोजर' और ऊपर और नीचे से '0.5 एफ / बनावट_हाइट'। आप नमूने की कलाकृतियों को देख रहे हैं - बनावट के नमूने आमतौर पर टेबल्स के केंद्र से नमूना करते हैं ताकि बाईं और दाईं ओर, ऊपर और नीचे (0 और 1 uv पर) आप अपने नमूने के जितने भी टेक्सल से बाहर हो जाएं, आपको 50% मिल रहा है। । यह या तो बनावट का दूसरा पक्ष है या एक डिफ़ॉल्ट नमूना रंग है।


यही कारण है कि उन्हें GL_CLAMP_TO_EDGEसेट मिल गया है, यह सीमा के नमूनों को बाहर कर देना चाहिए जो निकटतम इन-टेक्सचर पिक्सल का मूल्य लेता है। आप जो वर्णन करते हैं वह बहुत अच्छी तरह से काम कर सकता है, लेकिन यह बताता नहीं है कि समस्या पहले स्थान पर क्यों है।
आआआआआआआआआआ आआआआ

मैंने इसे बिना किसी बदलाव के
आज़माया है

0

मेरा सबसे अच्छा अनुमान है कि मैक और आईफोन के बीच अंतर मैक पर एंटीएलियासिंग के कारण होता है। मेरा 3 डी प्रोग्रामिंग थोड़ा कठोर है, लेकिन मुझे लगता है कि आपको सभी वर्गों को एक ही जाली या कुछ ऐसा बनाना होगा।

डर्टी हैक सॉल्यूशन सभी चौकों को थोड़ा बड़ा बनाने के लिए होगा ताकि वे एक-दूसरे को ओवरलैप और क्लिप करें और तदनुसार यूवी निर्देशांक समायोजित करें।


मैंने बिना किसी प्रभाव के एंटी-अलियासिंग (glDisable (GL_POLYGON_SMOTH) द्वारा) बंद करने की कोशिश की है। मैं
स्काईबॉक्स को कोर्ड

1
ये मुझे अच्छा लग रहा है। कम से कम अभी के लिए मैं अनुमानों से बाहर हूं, लेकिन आप यह पता लगाकर समस्या को कम करना चाह सकते हैं कि क्या यह काला पृष्ठभूमि है या काले रंग के रूप में दिखने वाली बनावट के माध्यम से खून बह रहा है। यदि आप लाल रंग का बहुभुज रखते हैं, तो क्या यह कला के रंग के पीछे है?
आआआआआआआआआआआ आआआआआ

मैं दीवारों का विस्तार करने की कोशिश करना चाहता हूं, इसलिए वे ओवरलैप करते हैं (जैसे कि ईजेविस ने लिखा है) - मुझे लगता है कि 0.0001 पर्याप्त होगा। आपको यूवी निर्देशांक बदलने की जरूरत नहीं है।
zacharmarz

1/10000 निश्चित रूप से पर्याप्त नहीं है, समस्या की भयावहता 1/4 से 1/2 पिक्सेल सीमा में प्रतीत होती है, इसलिए बनावट के आकार के आधार पर इसके लिए न्यूनतम परिमाण लगभग 1/1000 होगा। यूवी निर्देशांक को समायोजित नहीं करना थोड़े मैला है, बनावट की प्रकृति को देखते हुए परिणामस्वरूप दृश्य कूद ध्यान देने योग्य नहीं हो सकता है, लेकिन यह अभी भी गलत होगा। किसी भी मामले में, हैक के लिए आगे की सलाह मेरे पिछले टिप्पणी में पूछे गए प्रश्न के उत्तर पर निर्भर होनी चाहिए।
आआआआआआआआआआ आआआआ

कलाकृति बनावट के माध्यम से पृष्ठभूमि से खून बह रहा नहीं है। मैंने बिना किसी बदलाव के लाल रंग का बैकग्राउंड सेट किया है। मैंने बनावट निर्देशांक
मार्टीन पायलट

0

पुराने HW (या iphones शायद) पर क्यूबैप्स के साथ यह सामान्य समस्या है। के लिए जाँच करें

GL_ARB_seamless_cube_map

विस्तार अगर यह आपके hw पर उपलब्ध है। यदि ऐसा है तो। इसके उपयोग से समस्या को हल किया जाएगा।


समस्या iPhone 9 नहीं GeForce 9400M पर है। यह एक्सटेंशन मेरे लिए उपलब्ध नहीं है।
मार्टिन पायलट

यह निश्चित रूप से क्यूबैप्स के कारण होने वाली समस्या नहीं है, भले ही वह निर्बाध हो या न हो। यह एक कपड़ा लपेटने का मुद्दा है।
तारा

0

क्या छः बनावट की स्थापना की जाती है, विशेष रूप से, क्यूब मैप के रूप में या प्रत्येक स्काईबॉक्स के चेहरे अपनी बनावट के साथ अलग-अलग प्रस्तुत किए जाते हैं? मैंने सुना है कि कुछ शुरुआती पीसी सिस्टम में खराब फ़िल्टरिंग थी जब यह क्यूबमैप्स को संभालने के लिए आया था कि वे जरूरी नहीं कि एक चेहरे की बनावट से अगले तक छान लें जब आपने क्यूब किनारों के पास नमूना लिया था। AFAIK SGX (iphone GPU) को किनारों पर सही ढंग से फ़िल्टर करना चाहिए।

यह मेरे साथ हुआ है कि आपके साइड टेक्सचर के निचले हिस्से को कलाइयों के समान नीले रंग की छाया दिखती है। क्या आप कोशिश कर सकते हैं, कह सकते हैं, नीचे की पंक्ति (या कुछ पंक्तियों) को मैजेंटा की एक छिपी हुई छाया बना सकते हैं और देखें कि क्या यह रंग बदल जाता है? यह कुछ और विचार दे सकता है कि क्या हो रहा है या नहीं हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.