2010-04-18 4 views
5

Sto lavorando a un gioco e tutti i miei elementi grafici utilizzano il magenta come colore trasparente/magico. Sono tutti a 32 bit e il magenta è solo per comodità. Ad ogni modo, sarei grato se qualcuno potesse consigliarmi quale libreria dovrei usare per caricare le mie immagini (ho bisogno di caricarle in formato GL_RGBA, sia interne che texture specifiche).Caricamento di textures PNG su OpenGL

risposta

1

A parte le altre risposte che citano SDL e diavolo, ci sono altre due opzioni da considerare:

  • Usa libpng direttamente. Questo probabilmente avrà il più piccolo impatto sulla dimensione del codice se questo è importante, dal momento che non si aumenta per altri formati che non si utilizzano, nessuna DLL, ecc.
  • Utilizzare il caricamento della trama del sistema operativo. Questo può essere un buon modo per ridurre le dipendenze se preferisci usare le funzionalità del sistema operativo su librerie esterne. GDI + in Windows XP e versioni successive ha un caricamento delle texture integrato per alcuni formati come PNG e JPEG, e non lo so per certo, ma altri sistemi operativi potrebbero avere caratteristiche simili. È abbastanza semplice agganciare GDI + a OpenGL e il sistema operativo si sta occupando del caricamento della trama!
+0

Qualsiasi esempio di codice per il caricamento GDI +? – Macke

+0

Vedere GLTexture :: LoadFromFile() dalla riga 510 qui: http://construct2.svn.sourceforge.net/viewvc/construct2/source/common/cr/glrenderer/glrenderer_windows.cpp?revision=102&view=markup Potrebbe essere un po 'più complicato del necessario - utilizza trame premoltiplicate e ha il codice per copiare la trama su una superficie di potenza di due con grondaie trasparenti. – AshleysBrain

+0

Perché preoccuparsi di come caricare le immagini, quando ci sono librerie in giro che lo fanno per te. – Danvil

5

DevIL può caricare praticamente tutti i formati di file e può creare direttamente trame OpenGL. È il modo più semplice per andare.

È inoltre consigliabile utilizzare un formato file che supporti un canale alfa (PNG, TGA, ...). L'uso di un "colore magico" nelle immagini a 32 bit è davvero obsoleto!

+0

L'utilizzo di DevIL e OpenGL insieme per il caricamento delle immagini è estremamente semplice, quasi tutti i numeri magici sono uguali (in base alla progettazione). Ho del codice (non promette che sia il migliore ;-)) per fare questo qui (funzione loadShaderTexture): http://nwshader.svn.sourceforge.net/viewvc/nwshader/nwshader/init.cpp?revision=18&view=markup – ssube

7

Se è necessario solo il supporto PNG, utilizzare libpng. DevIL dovrebbe essere facile, ma è un po 'gonfio (fa molto di più che caricare le immagini) e internamente effettivamente chiama le funzioni OpenGL che possono rovinare la tua logica OpenGL.

Personalmente preferisco SDL_image, dal momento che sto utilizzando SDL nei miei progetti comunque. Sebbene non sia immediatamente evidente, la funzione SDL_BlitSurface() può eseguire la conversione da qualunque IMG_Load() restituisce il formato pixel necessario.

+1

DevIL può essere utilizzato per caricare solo immagini (senza chiamate OpenGL) o per caricare immagini direttamente nelle trame OpenGL (che necessariamente chiama le funzioni OpenGL). – Danvil

0

Un'altra opzione è OpenCV.

Fa molto più del semplice caricamento della trama, ma le probabilità sono buone, troverete anche l'uso delle sue altre caratteristiche.

+0

OpenCV fornisce funzioni per fornire dati di immagine in un formato pronto per essere inserito in una trama OpenGL? – thecoshman