Sto provando a caricare una bitmap in una trama OpenGL e visualizzarla sullo schermo, ma quando lo faccio, i valori rosso e blu sembrano cambiare (ad esempio: un'immagine blu appare arancione, verde le immagini rimangono invariate, ecc.). Questo problema esiste solo quando si caricano bitmap, posso caricare .pngs relativamente senza errori.Il caricamento di un BMP in trame OpenGL cambia i colori rosso e blu. (C++/Windows)
Questo è il codice che sto utilizzando per caricare le bitmap e impostare le trame. Sto usando DevIl, ma non sono sicuro di quanto sia rilevante, poiché il problema esisteva quando ho usato un sistema diverso (non ricordo bene cosa, era una funzione in window.h, credo):
ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
ilEnable(IL_ORIGIN_SET);
ILuint image;
ilGenImages(1, &image);
ilBindImage(image);
ilLoad(IL_BMP, "Data/NeHe.bmp"); // Incidentally, loading a png, although it fixes the problem,
// rotates the image 180 degrees. Not sure if that's important or not,
// But it's why I added the first line of code
glGenTextures(3, &_texture[0]);
glBindTexture(GL_TEXTURE_2D, _texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \
0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData());
ilInit()
e glEnable(GL_TEXTURE_2D)
sono entrambi chiamati in precedenza nel programma, tra le altre funzioni meno importanti. Qualsiasi aiuto nel trovare la causa (e si spera che risolva) il problema sarebbe molto apprezzato.
Grazie. Ho provato GL_BGR, ma ottengo un errore dicendo che non esiste. Inoltre, non vedo perché una bitmap verrebbe memorizzata con i dati BGR in primo luogo, vero? –
@ Keand64: i file BMP, o per la precisione, sono infatti memorizzati nell'ordine BGR. In realtà su sistemi moderni anche i bitmap del frambuffer sono in ordine BGR (A), quindi la fornitura di trame in formato BGR di solito è più veloce del formato RGB. GL_BGR è un token dalle versioni OpenGL> 1.1, tuttavia Windows Platform SDK viene fornito solo con le intestazioni per OpenGL-1.1 - è necessario accedere a qualsiasi altra via attraverso le estensioni. Scarica GLEW http://glew.sourceforge.net o GLee, usa le intestazioni da quelle che si possono fare con esso. – datenwolf
Puoi anche provare "#include" ma forse hai bisogno di ottenere una versione recente di glext.h da http://www.opengl.org/registry/api/glext.h –
Alink