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 :

Problème affichage de texture.


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 63
    Par défaut Problème affichage de texture.
    Voila j'essaye de faire un cube avec des texture dessus. J'arrive à charger l'image avec la librairie SDL. Mais apres la texture est pas joli elle ne représente pas l'image.




    Mes codes :

    main.cpp
    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
     
    using namespace std;
     
    #include <stdlib.h>
    #include <math.h>
    #include <unistd.h>
     
    #include <GL/glew.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <GL/glut.h>
     
    #include "scene.hpp"
     
    #define ESCAPE 27
     
    // La scene
    Scene s;
     
    // La fenetre
    int _win; 
    int _win_width;
    int _win_height;
     
     
    // Prototype glut
    void Rechape (int Width, int Height);
    void Display ();
    void Keyboard (unsigned char key, int x, int y);
     
    int main(int argc, char **argv) {  
      // Initialisation fenetre
      glutInit(&argc, argv);  
      glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);  
      glutInitWindowSize(640, 480);  
      glutInitWindowPosition(50, 50);  
      _win = glutCreateWindow("SIA Project - FERY MORI");  
      glutFullScreen();
     
      // Initialisation evenement
      glutDisplayFunc(&Display);  
      glutIdleFunc(&Display);
      glutReshapeFunc(&Rechape);
      glutKeyboardFunc(&Keyboard);
     
      // OpenGL - Boucle
      glClearColor(0.0f, 0.0f, 0.0f, 0.0f);		
      glClearDepth(1.0);				
      glDepthFunc(GL_LESS);				
      glEnable(GL_DEPTH_TEST);			
      glShadeModel(GL_SMOOTH);			
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();				
      gluPerspective(45.0f,(GLfloat)_win_width/(GLfloat)_win_height,0.1f,100.0f);	
      glMatrixMode(GL_MODELVIEW);
      s.init();
      glutMainLoop();  
     
      return 1;
    }
     
     
    /*
      Evenement : 
      -----------
    */
     
    void Rechape (int Width, int Height) {
      if (Height==0)				
        Height=1;
      glViewport(0, 0, Width, Height);		
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
      glMatrixMode(GL_MODELVIEW);
    }
     
     
    void Display () {
      glClearColor(175,151,124,0);
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity();				
      glTranslatef(-1.5f,0.0f,-6.0f);		
     
      s.draw();
      /*
        Dessin de la scene
      */
     
      glutSwapBuffers();
    }
     
     
    void Keyboard (unsigned char key, int x, int y) {
        if (key == ESCAPE) { 
    	glutDestroyWindow(_win); 
    	exit(0);                   
        }
    }
    scene.hpp
    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
     
    #ifndef SCENE_HPP
    #define SCENE_HPP
     
    #include "caisse.hpp"
     
    class Scene {
     
    public:
      void init ();
      void draw ();
     
    private:
      Caisse caisse;
    };
     
    #endif /* SCENE_HPP */
    caisse.hpp
    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
     
    #ifndef CAISSE_HPP
    #define CAISSE_HPP
     
    #include <GL/glut.h>     
    #include <GL/gl.h>	
    #include <GL/glu.h>
     
    class Caisse {
     
    public:
      void set ();
      void draw ();
     
    private:
      GLuint _id;
     
    };
     
    #endif /* CAISSE_HPP */
    scene.cpp
    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
     
    #include "scene.hpp"
     
    #include "caisse.hpp"
     
    #include <GL/glut.h>     
    #include <GL/gl.h>	
    #include <GL/glu.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>	
    #include <unistd.h>     
    #include <stdio.h>      
    #include <stdlib.h>     
    #include <iostream>
     
    void Scene::init () {
      caisse.set();
    }
     
    void Scene::draw () {
      caisse.draw();
    }
    caisse.cpp
    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
     
    #include "caisse.hpp"
     
    #include <GL/glut.h>     
    #include <GL/gl.h>	
    #include <GL/glu.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    void Caisse::set() {
      SDL_Surface *texture;
     
      glGenTextures(1,&_id);
      texture = IMG_Load ("../texture/caisse_bois.tga");
      glBindTexture (GL_TEXTURE_2D, _id);
      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
      glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
      glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
     
    }
     
    void Caisse::draw() {
      glActiveTexture(GL_TEXTURE0);
      glEnable(GL_TEXTURE_2D);
      glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
     
      glBindTexture(GL_TEXTURE_2D, _id);
      glBegin(GL_QUADS);
      // Front Face
      glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);    // Bottom Left Of The Texture and Quad
      glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	// Bottom Right Of The Texture and Quad
      glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	// Top Right Of The Texture and Quad
      glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	// Top Left Of The Texture and Quad
      // Back Face
      glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	// Bottom Right Of The Texture and Quad
      glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	// Top Right Of The Texture and Quad
      glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	// Top Left Of The Texture and Quad
      glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	// Bottom Left Of The Texture and Quad
      // Top Face
      glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	// Top Left Of The Texture and Quad
      glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	// Bottom Left Of The Texture and Quad
      glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	// Bottom Right Of The Texture and Quad
      glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	// Top Right Of The Texture and Quad
      // Bottom Face
      glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	// Top Right Of The Texture and Quad
      glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	// Top Left Of The Texture and Quad
      glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	// Bottom Left Of The Texture and Quad
      glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	// Bottom Right Of The Texture and Quad
      // Right face
      glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	// Bottom Right Of The Texture and Quad
      glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	// Top Right Of The Texture and Quad
      glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	// Top Left Of The Texture and Quad
      glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	// Bottom Left Of The Texture and Quad
      // Left Face
      glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	// Bottom Left Of The Texture and Quad
      glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	// Bottom Right Of The Texture and Quad
      glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	// Top Right Of The Texture and Quad
      glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	// Top Left Of The Texture and Quad
      glEnd();
    }
    Donc voila je sais pas pourquoi la texture ne couvre pas la totalité de mon cube et pourquoi l'image est moche et déformée comme ca.

    Si quelqu'un à la solution je le remercie d'avance je vais quand meme continué de chercher.

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Essayes d'activer le depth test avant de plaquer tes textures.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 63
    Par défaut
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      glEnable(GL_TEXTURE_2D);
      glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
      glEnable(GL_DEPTH_TEST);
      glBindTexture(GL_TEXTURE_2D, _id);
      glBegin(GL_QUADS);
      // Front Face
      glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
    Mais meme problème je commence à desepérer.

  4. #4
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    le glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);

    il est censé te servir à quoi ?
    il se passe quoi si tu l'enlèves ?

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 582
    Par défaut
    vu la capture, ce n'est visiblement pas un problème dans ton code mais plus lié au chargement de ta texture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
    ta texture au format TGA, tu es certain qu'elle comporte bien 4 échantillons ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  6. #6
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    grace à toi je sais à quoi sert glTexEnv maintenant

    effectivement l'erreur c'est
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);

    à remplacer par

    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_RGB, GL_UNSIGNED_BYTE, texture->pixels);

    ou

    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_BGR, GL_UNSIGNED_BYTE, texture->pixels);

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 582
    Par défaut
    ha mais il ne faut pas donner toutes les réponses comme ça d'un coup
    il faut le laisser chercher un peu
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

Discussions similaires

  1. Problème d'affichage de texture.
    Par kokarez dans le forum DirectX
    Réponses: 2
    Dernier message: 08/12/2009, 09h57
  2. [Débutant][OpenGL ES] Problème affichage textures
    Par Niicoo dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/06/2009, 15h15
  3. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  4. [VBO] Problème d'affichage de texture
    Par Lung dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/04/2009, 08h16
  5. [OpenSceneGraph] Problème affichage de texture
    Par PP(Team) dans le forum OpenSceneGraph
    Réponses: 3
    Dernier message: 23/01/2007, 16h35

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