Bonjour

je suis en train de travailler (encore et toujours ) sur les textures en OPENGL et je suis actuellement confrontée à petit problème .

Dans le code ci-dessous, il s'agit tout simplement d'appliquer une texture au format BMP à un "bête" carré. Le problème, c'est qu'à l'exécution, j'ai le message d'erreur :'' failed to open DIB file ????".

Je pense que le problème vient à l'appel de la fonction auxDIBImageLoad. Nota: le programme a l'air de bien accéder au fichier image NeHe.bmp! Alors je ne sais pas du tout à quoi ce problème peut être du !

voici le code :

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
#include <windows.h>    
#include <GL/GlAux.h>
#include<GL/glut.h>        // fonctions AUX Library
#include <windows.h> // En-tete pour Windows
#include <stdio.h> // En-tete pour les entrees/sorties standards (NOUVEAU)
#include <GL/gl.h> // En-tete pour la bibliotheque OpenGL32
#include <GL/glu.h> // En-tete pour la biblioteque GLu32
 
#include <iostream>
using namespace std;
 
GLuint texture[1]; // Stockage d'une texture (NOUVEAU)
 
/************************* TEXTURES *************************************************************/
AUX_RGBImageRec *LoadBMP(char *Filename) // Charge une image bitmap
{
	FILE *File=NULL; // Descripteur de fichier
	if (!Filename) // Verifie qu'un nom de fichier a ete donne
	{
		cout<<"nom de fichier non donné!!! \n";
		return NULL; // Si non, retourne NULL
	}
	File=fopen(Filename,"r"); // Controle si le fichier existe
	if (File) // Est-ce que le fichier existe ?
	{
	fclose(File); // Ferme le descripteur
	cout<<"ouverture du bitmap... \n";
	return auxDIBImageLoad((LPCWSTR)Filename); // Ouvre le bitmap et renvoie un pointeur
	}
	cout<<"le fichier n'existe pas!\n";
	return NULL; // Retourne NULL si le chargement a echoue
}
 
int LoadGLTextures() // Ouvre un bitmap et le convertit en texture
{
	int Status=FALSE; // Indicateur du statut
	AUX_RGBImageRec *TextureImage[1]; // Cree une structure d'image
	memset(TextureImage,0,sizeof(void *)*1); // Initialise le pointeur à NULL
	// Charge le bitmpap, controle les erreurs et quitte si le bitmap n'a pas ete trouve
 
	if (TextureImage[0]=LoadBMP("NeHe.bmp"))
		{
			Status=TRUE; // Met la veriable Status à TRUE
			glGenTextures(1, &texture[0]); // Cree la texture
			// Génération typique de texture utilisant les donnees du bitmap
			glBindTexture(GL_TEXTURE_2D, texture[0]);
			// Genere la texture
			glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX,
			TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
			// Filtrage lineaire
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
			// Filtrage lineaire
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		}
 
	if (TextureImage[0]) // Si la texture existe
		{
		if (TextureImage[0]->data) // Si l'image de la texture existe
			{
			free(TextureImage[0]->data); // Libere l'image de la texture
			}
		free(TextureImage[0]); // Libere la structure de l'image
		}
 
	return Status; // Renvoie le statut
}
/************************************* Initialisation *******************************************************************************/
int init(void)
{
	glClearColor(0.0,0.0,0.0,0.0);// définit la couleur de vidage à utiliser
	if (!LoadGLTextures()) // Va dans notre routine de chargement de texture
	{
	// Si la la texture n'a pas ete chargee, retourne FALSE (nouveau)
	return FALSE;
	}
	glEnable(GL_TEXTURE_2D);// activation de la texture
	glShadeModel(GL_SMOOTH); // Active les ombres douces
 
	glShadeModel(GL_FLAT);
}
 
/*********************************** Dessin du carré ******************************************************************************/
void carre(void)
{
	glColor3f(1.0,1.0,1.0);// définition de la couleur du carre
	glBegin(GL_POLYGON);// début de l'objet
 
	glTexCoord2f(0.0f, 1.0f); glVertex2f(100-40,100+40); // partie sup gauche
	glTexCoord2f(1.0f, 1.0f); glVertex2f(100+40,100+40); // partie sup droite
	glTexCoord2f(1.0f, 0.0f); glVertex2f(100+40,100-40); // partie inf droite
	glTexCoord2f(0.0f, 0.0f); glVertex2f(100-40,100-40); // partie inf gauche
 
	glEnd();// fin de l'objet
 
}
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);// vidage de la fenêtre avec la couleur en cours, c'est à dire le noir
	glBindTexture(GL_TEXTURE_2D, texture[0]); // Selectionne notre texture
	glPushMatrix();
	carre();
	glPopMatrix();
	glutSwapBuffers();//échange de tampons pour une meilleure visualisation.
}
 
 
void reshape(int w, int h)
{
	glViewport(0,0,(GLsizei)w, (GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0,200,0.0,200,-1.0,1.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}
/*************************************** main ***********************************************************************/
int main(int argc, char ** argv)
{
	glutInit(&argc,argv);// initialise le glut et traite les éventuels arguments de ligne de commande. doit être appelée avant toute autre routine GLUT
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);// spécifie l'emploi de modèle chromatique RVBA ou en index des couleurs
	glutInitWindowSize(200,200);//spécifie la taille de la fenêtre
	glutInitWindowPosition(100,100);//spécifie l'emplacement de l'écran pour l'angle supérieur gauche de la fenêtre
	glutCreateWindow("Carré et Textures");
	init();
	glutDisplayFunc(display);// fonction d'actualisation événementielle: elle éxécute la fonction display
	glutReshapeFunc(reshape);// indique l'action à entreprendre lorsque la fenêtre est redimensionnée
	glutMainLoop();// la fenêtre ne s'affiche pas tant qu'on appelle pas glutMainLoop
	return 0;
}
Est ce quelqu'un saurait d'où viendrait ce problème ?

merçi d'avance pour vos réponses !!!!