Bonjour à vous.
Mon moteur charge parfaitement pour les bmp et les tga (que j'ai codé moi même). Mais j'avais envie d'accélérer le développement de mon moteur 3d, je suis passé à DevIL, et ça coince sur les jpeg : l'image est à l'envers, avec on dirait qu'il y a comme un glColor sur le bleu.
Image originale:
Bug:
Comme vous pouvez le voir, la texture blanche (blanc.jpg) est bien blanche. D'où peux venir le problème ? Y a t-il inversion des couleurs dans un jpeg ?
J'utilise ce code pour ajouter la texture à OpenGL dans le manager de textures:
La fonction de chargement du jpeg avec devIL (largement inspirée du tutoriel sur le YES engine):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 GLuint id = 0; // id de la texture à retourner GLubyte *pixels = 0; // tableau de pixels de la texture int width, height; // dimensions de la texture int bpp = 0; //bit per pixel ... LoadJPG(szFilename.c_str(), &pixels, &width, &height, &bpp); ... // Création et initialisation de la texture opengl glGenTextures( 1, &id ); glBindTexture( GL_TEXTURE_2D, id ); g_log.Write(LOG_WARNING, "MTextureManager:: ID = %i", id); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); //seulement là pour tester les jpeg mode = GL_RGBA; components = 4; gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, mode, GL_UNSIGNED_BYTE, pixels);
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 int MTextureManager::LoadJPG(const char *name, unsigned char **pixels, int *width, int *height, int *bpp) { g_log.Write(LOG_FAILURE, "MTextureManager:: Début DevIL"); // Génération d'une nouvelle texture unsigned int Texture; ilGenImages(1, &Texture); ilBindImage(Texture); // Chargement de l'image if (!ilLoadImage(const_cast<ILstring>(name))) { g_log.Write(LOG_FAILURE, "MTextureManager:: Erreur DevIL : l'appel à ilLoadImage a échoué sur %s", name ); return 0; } // Récupération de la taille de l'image *width = ilGetInteger(IL_IMAGE_WIDTH); *height = ilGetInteger(IL_IMAGE_HEIGHT); *bpp = ilGetInteger(IL_IMAGE_BPP); g_log.Write(LOG_PLAINTEXT, "MTextureManager:: Width = %i Height = %i, Bpp = %i", *width, *height, *bpp); // Récupération des pixels de l'image *pixels = new unsigned char[(*width) * (*height) * (*bpp)]; memcpy(*pixels, ilGetData(), (*width) * (*height) * (*bpp)); // Suppression de la texture ilBindImage(0); ilDeleteImages(1, &Texture); g_log.Write(LOG_PLAINTEXT, "MTextureManager:: DevIL fin"); return 1; }
Partager