2009-07-20 126 views
7

我想更改給定位置的OpenGL紋理中的某些紋理元素。任何人都可以幫我解決這個問題嗎?如何更改OpenGL紋理中的單個紋理元素

這是functionnality,我想,

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

這將用來維持我的遊戲小地圖(如果任何人有維護一個動態地圖,提升口感更好的主意)。順便說一句,這必須做得很快。謝謝。

回答

11

OpenGL具有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 2009-07-20 14:00:14

+0

是的...那是我想要的功能。你大量增加我的遊戲的FPS。大聲笑。再次感謝。 – Morpheus 2009-07-20 14:14:06

0

性能方面,你可能是更好的本地存儲的地圖作爲自己的數組並把它畫到屏幕爲一組無網紋四邊形。

渲染原語被大量優化,特別是與創建或修改紋理相比。