IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Texture Opengl : problème d'éxecution au chargement d'une image bmp


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Par défaut Texture Opengl : problème d'éxecution au chargement d'une image bmp
    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 !!!!

  2. #2
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Il y a une section dédié à OpenGL dans le forum ....

    Vérifie que tu n'as rien oublié du tutoriel de Nehe

  3. #3
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Bonjour,
    je ne suis pas rentré dans les détails du code mais juste une question bête (et qui arrive bien souvent ^^) : As-tu vérifié que le chemin d'accès à ta bitmap soit correct? Pour tester utilise le chemin absolu...

    EDIT : J'ai loopé ce passage
    Citation Envoyé par milena
    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 !
    , pourquoi "a l'air"?

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Par défaut
    As-tu vérifié que le chemin d'accès à ta bitmap soit correct? Pour tester utilise le chemin absolu...
    oui, j'ai bien vérifié que le chemin d'accès était correcte.
    (J'ai d'ailleurs écris une petite fonction à part pour vérifier cela.)

    Vérifie que tu n'as rien oublié du tutoriel de Nehe
    je me suis effectivement directement inspirée du tuto de Nehe! mais je n'arrive pas encore à trouver ce qui me manque

    je continue les recherches...

  5. #5
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Autre idée ... regarde si ton cast (LPCWSTR)Filename est correct..

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Par défaut
    Bonsoir

    j'y ai pensé aussi mais le problème, c'est que lorsque je ne fais pas ce cast, le compilateur n'est pas content et me dit :

    error C2664: 'auxDIBImageLoadW' : impossible de convertir le paramètre 1 de 'char *' en 'LPCWSTR'
    Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    d'où mon cast...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de performance au chargement d'une Map
    Par alen dans le forum SL & STL
    Réponses: 11
    Dernier message: 13/01/2009, 15h37
  2. Problème chargement d'une image dans canvas
    Par Hujii dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 28/04/2008, 21h33
  3. Probleme de chargement d'une image avec opengl
    Par JilyJ dans le forum OpenGL
    Réponses: 11
    Dernier message: 30/05/2007, 14h11
  4. Chargement d'une image BMP sur 24 bits
    Par kj_83 dans le forum C++Builder
    Réponses: 3
    Dernier message: 26/12/2006, 19h32
  5. Problème lors du chargement d'une image gif
    Par pat-trix dans le forum Applets
    Réponses: 15
    Dernier message: 19/09/2006, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo