2009-07-20 9 views
7

Quiero cambiar algunos texels en una textura OpenGL para una ubicación determinada. ¿Alguien puede ayudarme con este pls?Cómo cambiar el texel individual en la textura OpenGL

Esta es la Funcionalidad que yo quiero,

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

Esto utilizará para mantener el minimapa de mi juego (si alguien tiene una mejor idea de mantener una dinámica de mapas de la textura). Por cierto, esto debe hacerse rápido. Gracias.

Respuesta

11

OpenGL tiene la función glTexSubImage2D, que es exactamente para su propósito.

He aquí una función que cambia el color de uno Texel:

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

wow ... Genial, muchas gracias Nikolai. Lo intentaré. – Morpheus

+0

Sí ... esa era la funcionalidad que quería. Aumentas mucho los FPS de mi juego. lol. Gracias de nuevo. – Morpheus

+0

¿Necesita tener otros comandos encima o debajo de esto? No parece funcionar para mí. – Geoff

0

En cuanto al rendimiento, que puede ser mejor para almacenar el mapa a nivel local como su propia matriz y sacarla a la pantalla como un conjunto de texturizar quads.

Las primitivas de representación están muy optimizadas, especialmente en comparación con la creación o modificación de texturas.

+5

No dé esto por supuesto, depende en gran medida del tamaño del mapa y del número de téxeles en cada cambio. Si el mapa tuviera 100 x 100 texels, sería muy ineficiente dibujarlo usando la geometría. –

+0

@NikolaiRuhe ¿Funcionará este método para borrar parte de las texturas? Alternativamente, ¿puedo usar este método para implementar un efecto de borrado en las texturas? – Rafay

Cuestiones relacionadas