2009-07-20 7 views
7

Desidero modificare alcuni texel in una trama OpenGL per una determinata posizione. Qualcuno può aiutarmi con questo pls?Come modificare il singolo texel nella trama OpenGL

Questa è la functionnality che voglio,

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

Questa utilizzerà per mantenere la minimappa del mio gioco (se qualcuno ha una migliore idea di mantenere una dinamica mappa-texture-). A proposito, questo deve essere fatto velocemente. Grazie.

risposta

11

OpenGL ha la funzione glTexSubImage2D, che è esattamente per lo scopo.

Ecco una funzione che cambia il colore di un 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 ... Grande, grazie mille Nikolai. Lo proverò. – Morpheus

+0

Sì ... questa era la funzionalità che volevo. Aumenta il numero di FPS del mio gioco per partita. lol. Grazie ancora. – Morpheus

+0

Hai bisogno di avere altri comandi sopra o sotto questo? Non sembra funzionare per me. – Geoff

0

delle prestazioni, si può essere meglio per memorizzare la mappa a livello locale come la propria matrice e disegnare sullo schermo come un insieme di untextured quad.

Il rendering delle primitive è fortemente ottimizzato, soprattutto rispetto alla creazione o modifica delle trame.

+5

Non dare per scontato, dipende in gran parte dalla dimensione della mappa e dal numero di texel in ogni cambiamento. Se la mappa fosse di 100 x 100 texels sarebbe molto inefficiente disegnarla usando la geometria. –

+0

@NikolaiRuhe Questo metodo funziona per cancellare parte delle trame? In alternativa, posso usare questo metodo per implementare un effetto di cancellazione sulle trame ?? – Rafay

Problemi correlati