2009-07-20 4 views
7

मैं किसी दिए गए स्थान के लिए ओपनजीएल बनावट में कुछ टेक्स्ट बदलना चाहता हूं। क्या कोई मुझे इस pls के साथ मदद कर सकते हैं?OpenGL बनावट में एकल texel को कैसे बदलें

यह functionnality है कि मैं चाहता हूँ

void ChangeTexelColor(int x, int y, GLuint id, int texW, int texH, GLenum format) 
{ 
    //What is here ?  
} 

यह मेरा खेल का minimap बनाए रखने के लिए (यदि किसी को भी एक गतिशील नक्शे-texture- को बनाए रखने का एक बेहतर विचार है) का उपयोग करेगा। बीटीडब्ल्यू, यह तेजी से किया जाना चाहिए। धन्यवाद।

उत्तर

11

ओपनजीएल में glTexSubImage2D फ़ंक्शन है, जो आपके उद्देश्य के लिए बिल्कुल है।

यहाँ एक कार्यों कि एक टेक्सेल के रंग बदल जाता है:

void changeTexelColor(GLuint id, GLint x, GLint y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { 
    uint8_t data[4]; 
    data[0] = r; 
    data[1] = g; 
    data[2] = b; 
    data[3] = a; 
    glBindTexture(GL_TEXTURE_2D, id); 
    glTexSubImage2D(GL_TEXTURE_2D, 
        0, 
        x, 
        y, 
        1, 
        1, 
        GL_RGBA, 
        GL_UNSIGNED_BYTE, 
        data); 
} 
+0

वाह ... बढ़िया, बहुत बहुत धन्यवाद निकोलाई। मैं इसे आजमाऊंगा। – Morpheus

+0

हाँ ... वह कार्यक्षमता थी जो मैं चाहता था। आप मेरे खेल के एफपीएस को बहुत बढ़ाते हैं। जबरदस्त हंसी। एक बार फिर धन्यवाद। – Morpheus

+0

क्या आपको इसके ऊपर या नीचे अन्य आदेशों की आवश्यकता है? यह मेरे लिए काम नहीं लग रहा है। – Geoff

0

अभिनय की दृष्टि से, आप अपने खुद सरणी के रूप में स्थानीय रूप से नक्शे की दुकान और बिना टैक्स्चर का एक सेट के रूप में स्क्रीन पर आकर्षित करने के लिए बेहतर हो सकता है quads।

प्रतिपादन प्राइमेटिव्स को अत्यधिक अनुकूलित किया जाता है, विशेष रूप से बनावट बनाने या संशोधित करने की तुलना में।

+5

इसे मंजूर न करें, यह नक्शे के आकार और प्रत्येक परिवर्तन में ग्रंथों की संख्या पर निर्भर करता है। यदि नक्शा 100 x 100 टेक्स्ट था तो यह ज्यामिति का उपयोग करके इसे आकर्षित करने में बहुत अक्षम होगा। –

+0

@NikolaiRuhe यह विधि बनावट के हिस्से को मिटाने के लिए काम करेगी ?? वैकल्पिक रूप से मैं बनावट पर एक मिटाने प्रभाव को लागू करने के लिए इस विधि का उपयोग कर सकते हैं ?? – Rafay