बहुत समय पहले मुझे एक बनावट प्रदर्शित करने में कोई समस्या नहीं थी क्योंकि मैं टेक्सास के केंद्रों के बजाय बनावट के किनारों के रूप में टेक्सल्स के किनारों का उपयोग कर रहा था। यह, रैखिक मिश्रण के संयोजन में बनावट द्वारा दिए गए शुद्ध रंगों के बजाय रंगों का एक चिकना परिणाम देता है।टेक्साल केंद्रों पर नमूना उचित परिणाम नहीं देता है, ओपनजीएल, सी ++
मुझे यहां दिए गए सलाहों के लिए धन्यवाद, मैंने सोचा कि मेरी समस्या हल हो गई है क्योंकि मैंने टेक्सास के केंद्रों को निर्देशांक के रूप में उपयोग करना शुरू किया था, लेकिन यह केवल एक मामले में काम करता था और मुझे नहीं पता कि केवल उस मामले में क्यों।
फिर मैं कुछ तस्वीरें दिखाऊंगा।
2 पिक्सल के सीमा के साथ एक बनावट मैं उपयोग कर रहा हूँ (32x32 पिक्सल) है:
मेरी पूरी वस्तु है कि तैयार की जा रही 9 quads के होते हैं, लेकिन वे (केवल एक बनावट का उपयोग मैंने दिखाया)। उनमें से एक मेरी समस्या के लिए एक स्पष्टीकरण के रूप में काम करेगा:
मुझे लगता है कि यह अच्छी तरह से दिखाई दे रहा है कि कि ट्रैक्टर के रंग ठीक से बनावट के अनुसार सेट नहीं हैं।
यह सम्मिश्रण के साथ एक समस्या की तरह लग रहा है, लेकिन मैं texels 'केन्द्रों का इस्तेमाल किया है निर्देशांक बनावट स्थापित करने के लिए इस तरह,:
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(0.0 + texelCentersOffset, maxTexCoordBorderY + texelCentersOffset);
glVertex2i(pos.x, pos.y + height - m_borderWidth);
// Top left
glTexCoord2f(0.0 + texelCentersOffset, (GLfloat)1.0 - maxTexCoordBorderY - texelCentersOffset);
glVertex2i(pos.x, pos.y + m_borderWidth);
// Top right
glTexCoord2f(maxTexCoordBorderX - texelCentersOffset, (GLfloat)1.0 - maxTexCoordBorderY - texelCentersOffset);
glVertex2i(pos.x + m_borderWidth, pos.y + m_borderWidth);
// Bottom right
glTexCoord2f(maxTexCoordBorderX - texelCentersOffset, maxTexCoordBorderY + texelCentersOffset);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
glEnd();
स्पष्टीकरण के लिए:
m_borderWidth
= 2
maxTexCoordBorderX
= maxTexCoordBorderY
= 2/32 = 0.0625
texelCentersOffset
= 1/64 = 0.015625
क्या कोई मुझे बता सकता है कि मैंने जो लिखा है उसमें क्या गलत है?
EDIT1:
यहाँ मेरी बनावट के लिए सेटिंग्स हैं:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
GL_REPEAT);
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, m_width, m_height,
GL_RGBA, GL_UNSIGNED_BYTE, pixmap);
जब मैं GL_NEAREST को GL_LINEAR से बदलने के लिए, यह ठीक से काम करता है ताकि यह स्पष्ट रूप से सम्मिश्रण साथ एक समस्या है, लेकिन अभी भी समझ नहीं यह गलत क्यों है।
EDIT2:
जब मैं ट्रैक्टर की ऊंचाई बढ़ाने के रूप में एक ही या बनावट की ऊंचाई से भी बड़ा हो सकता है, यह किसी भी बनावट निर्देशांक बदले बिना सही ढंग से काम करता है।
आप अपना प्रक्षेपण और मॉडलव्यू मैट्रिक्स कहां सेट करते हैं? 'Pos' का मूल्य क्या है? – genpfault
@genpfault pos.x और pos।y 0 हैं इसलिए उन्हें छोड़ा जा सकता है। मैट्रिस इस तरह की शुरुआत में सेट हैं: glViewport (0, 0, चौड़ाई, ऊंचाई); // वर्तमान व्यूपोर्ट रीसेट करें glMatrixMode (GL_PROJECTION); // प्रक्षेपण मैट्रिक्स का चयन करें glLoadIdentity(); \t \t \t \t \t \t \t \t \t // प्रोजेक्शन मैट्रिक्स \t glOrtho (0.0, चौड़ाई, ऊंचाई, 0.0, 0.0, 1.0) रीसेट; glMatrixMode (GL_MODELVIEW); \t \t \t \t \t \t // Modelview मैट्रिक्स glLoadIdentity() का चयन करें; \t \t \t \t \t \t \t \t \t // Modelview मैट्रिक्स –
रीसेट आप कोने के Texel केन्द्रों आवंटित करने के लिए कोशिश नहीं करनी चाहिए। आप वास्तव में क्या चाहते हैं कि रेक्सराइजेशन के बाद * परिणामी टुकड़ों पर केंद्रित होना चाहिए। मैंने उत्तर के माध्यम से एक सुंदरता (चित्रों के साथ व्याख्या करने के लिए) लिखा है, शायद इसे पढ़ने से आपको समझने में मदद मिलेगी: http://stackoverflow.com/a/11458037/1236185 – Tim