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 :

Chargement de Texture


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 58
    Points : 40
    Points
    40
    Par défaut Chargement de Texture
    Salut, je sais y'a eu 40 posts sur le sujet, y'a plein de sites qu'en parle, mais comme vous l'avez deviné, j'ai quand meme un probleme

    Aucune texture ne s'affiche :'(

    Et donc pour vous montrer ce que j'ai fais (en gros), j'ai refais un autre programme qui ne marche pas mieux mais qu'evitera des bouts de code de 5 ou 6 classes différentes :

    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
     
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <SDL/SDL.h>
    #include <iostream>
     
    using namespace std;
     
    SDL_Surface* ecran;
    GLuint tex;
    SDL_Surface* texture;
     
    bool init();
    void reshape(int, int);
    void display();
     
    int main(int argc, char** argv)
    {
    	if (!init())
    		return -1;
    	SDL_Event event;
     
    	reshape(640, 480);
    	while (true)
    	{
    		SDL_PollEvent(&event);
    		if (event.type == SDL_QUIT)
    		{
    			SDL_Quit();
    			exit(0);
    		}
    		display();
    	}
    	return 0;
    }
     
    bool init()
    {
    	if (SDL_Init(SDL_INIT_VIDEO) < 0)
    	{
    		cout << "Impossible de charger SDL." << endl;
    		return false;
    	}
    	atexit(SDL_Quit);
    	if ((ecran = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL|SDL_GL_DOUBLEBUFFER|SDL_HWSURFACE)) == NULL)
    	{
    		cout << "Impossible d'initialiser l'ecran." << endl;
    		return false;
    	}
    	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    	SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    	glClearColor(0.0, 0.0, 0.0, 0.0);
    	glClearDepth(1.0);
    	glShadeModel(GL_SMOOTH);
    	glEnable(GL_DEPTH_TEST);
     
    	texture = SDL_LoadBMP("dice.bmp");
     
    	glEnable(GL_TEXTURE_2D);
    	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    	glGenTextures(1, &tex);
    	glBindTexture(GL_TEXTURE_2D, tex);
    	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, GL_RGB, texture->w, texture->h, 0, GL_BGR, GL_UNSIGNED_BYTE, texture->pixels);
    	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    	return true;
    }
     
    void reshape(int w, int h)
    {
    	glViewport(0, 0, w, h);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 1.0, 10.0);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    }
     
    void display()
    {
    	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    	glBindTexture(GL_TEXTURE_2D, tex);
    	glBegin(GL_QUADS);
    		glColor3f(1.0, 0.0, 0.0);
    		glTexCoord2i(0, 0);
    		glVertex3f(-1.0, -1.0, 0.0);
    		glTexCoord2i(1, 0);
    		glVertex3f(1.0, -1.0, 0.0);
    		glTexCoord2i(1, 1);
    		glVertex3f(1.0, 1.0, 0.0);
    		glTexCoord2i(0, 1);
    		glVertex3f(-1.0, 1.0, 0.0);
    	glEnd();
    	SDL_GL_SwapBuffers();
    }
    Je programme en C++ sous linux


    PS : Code corrigé, il fonctionne la

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 529
    Points : 5 202
    Points
    5 202
    Par défaut
    tu te positionne en 0,0,5 et tu regardes à l'origine (0,0,0)
    ce n'est pas un problème de culling ? essaies d'ajouter glDisable(GL_CULL_FACE) dans ton init

    une petite chose aussi, j'aimerai l'avis d'autres personnes : dans l'init tu as mis glTexEnvf après glTexImage2D, je ne sais pas si le fait de le mettre avant ou après change quelque chose mais j'aurai tendance à le mettre avant
    il faudrait que je teste, mettre les glTexParameteri avant ou après l'appel à glTexImage2D change quoi ? les paramètres sont ils mémorisés pour la texture ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    J'ai essaye d'enlever le culling ca change rien.
    Et meme en inversant l'ordre des differentes fonctions, ca change rien

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Cela fait un moment que je ne me suis penché sur la question (une fois qu'on a un code qui marche, on arrête de vraiment regarder les entrailles), mais quelques points bizarres:

    Dans ta fonction init, ton return est en plein milieu de la fonction:

    Sinon, regarde si sans texture, ton quad est dessiné et enfin regarde si ton image a bien des dimensions qui sont des puissances de 2 (modifie la taille pour que ce soit du 512*512)

    Jc

  5. #5
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 529
    Points : 5 202
    Points
    5 202
    Par défaut
    Citation Envoyé par fearyourself
    Dans ta fonction init, ton return est en plein milieu de la fonction
    En lisant cela je suis remonté et effectivement, le return est en plein milieu, avant même l'init d'OpenGL ET de la texture

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Avouez que quand meme, un code de boulet comme ca, on en voit pas souvent

    Bon maintenant faut que je trouve pourquoi ca marche pas dans mon programme principal

    Au moins ca fera un code d'exemple pour les prochains :p

    Merci bien les gens

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

Discussions similaires

  1. Chargement de texture jpeg
    Par jbeaussier dans le forum OpenGL
    Réponses: 5
    Dernier message: 03/03/2008, 15h55
  2. Chargement jpg : Texture ou surface
    Par Merys dans le forum Moteurs 3D
    Réponses: 1
    Dernier message: 28/11/2007, 15h53
  3. Lenteur de chargement de texture bitmap
    Par DestinyWar45 dans le forum OpenGL
    Réponses: 1
    Dernier message: 30/11/2006, 06h38
  4. Chargement de texture sans "glaux" en pur Win32 ?
    Par Pragmateek dans le forum Windows
    Réponses: 10
    Dernier message: 08/09/2006, 18h26
  5. chargement de texture avec la SDL
    Par Fry dans le forum OpenGL
    Réponses: 7
    Dernier message: 27/05/2004, 15h31

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