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

GLUT Discussion :

Problème de skybox


Sujet :

GLUT

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Problème de skybox
    Bonsoir,

    J'ai actuellement un problème avec le tutorial sur les skybox.
    Je n'arrive pas a le faire fonctionner correctement :/
    Le pire c'est que dans l'après midi ca a fonctionné, et entre temps j'ai du refaire le code ( fausse manip ) et je n'y arrive plus ><

    A savoir que la fonction ImageLoad fonctionne très bien
    quand je passe le float t de drawSkybox a 1.0f, il m'affiche une seule face qui se déplace en même temps que moi
    mes images sont en taille 400*400 si ca a une quelconque importance

    Merci a ceux qui prendront le temps de m'aider et surtout de m'expliquer ce qui pose problème

    Voici le code en question:
    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
     
    GLuint initSkybox(){
    // Liste des faces successives pour la création des textures de CubeMap
      GLenum cube_map_target[6] = {           
        GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB,
        GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
        GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB,
        GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB,
        GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB,
        GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB
      };
     
      // Chargement des six textures
      Image* texture_image[6];
      int i;
      for(i=0;i<6;i++){
        texture_image[i]=(Image*)malloc(sizeof(Image));
      }
      ImageLoad("left.bmp",texture_image[0]  );
      ImageLoad( "right.bmp",texture_image[1]  );
      ImageLoad( "back.bmp",texture_image[2] );
      ImageLoad( "front.bmp",texture_image[3] );
      ImageLoad( "bottom.bmp",texture_image[4] );
      ImageLoad( "top.bmp",texture_image[5] );
     
      // Génération d'une texture CubeMap
      GLuint cube_map_texture_ID;
      glGenTextures(1, &cube_map_texture_ID);
     
      // Configuration de la texture
      glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, cube_map_texture_ID);
     
      for (i = 0; i < 6; i++)
        {
          glTexImage2D(cube_map_target[i], 0, 3, texture_image[i]->sizeX, texture_image[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture_image[i]->data);
          if (texture_image[i])				
    	{
    	  if (texture_image[i]->data)	
    	    {
    	      free(texture_image[i]->data);	
    	    }
    	  free(texture_image[i]);	
    	}
        }
     
      glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
      glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
      glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP);
      glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP);
      return(cube_map_texture_ID);
    }
    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
     
    void drawSkybox(GLuint cube_map_texture_ID){
    // Taille du cube
    float t = 1.0f;
    // Utilisation de la texture CubeMap
    glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, cube_map_texture_ID);
     
    // Réglage de l'orientation
    glPushMatrix();
    glLoadIdentity();
     
    // Rendu de la géométrie
    glBegin(GL_TRIANGLE_STRIP);			// X Négatif		
    	glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t); 	
    	glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t);
    	glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t);
    	glTexCoord3f(-t,t,t); glVertex3f(-t,t,t);
    glEnd();
     
    glBegin(GL_TRIANGLE_STRIP);			
    	glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t);
    	glTexCoord3f(t,-t,t); glVertex3f(t,-t,t);
    	glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); 
    	glTexCoord3f(t,t,t); glVertex3f(t,t,t); 	
    glEnd();
     
    glBegin(GL_TRIANGLE_STRIP);			// Y Négatif	
    	glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t);
    	glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t);
    	glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t);
    	glTexCoord3f(t,-t,t); glVertex3f(t,-t,t);
    glEnd();
     
    glBegin(GL_TRIANGLE_STRIP);			// Y Positif		
    	glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t);
    	glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); 
    	glTexCoord3f(-t,t,t); glVertex3f(-t,t,t);
    	glTexCoord3f(t,t,t); glVertex3f(t,t,t); 	
    glEnd();
     
    glBegin(GL_TRIANGLE_STRIP);			// Z Négatif		
    	glTexCoord3f(-t,-t,-t); glVertex3f(-t,-t,-t);
    	glTexCoord3f(t, -t,-t); glVertex3f(t,-t,-t);
    	glTexCoord3f(-t,t,-t); glVertex3f(-t,t,-t);
    	glTexCoord3f(t,t,-t); glVertex3f(t,t,-t); 
    glEnd();
     
    glBegin(GL_TRIANGLE_STRIP);			// Z Positif	
    	glTexCoord3f(-t,-t,t); glVertex3f(-t,-t,t);
    	glTexCoord3f(-t,t,t); glVertex3f(-t,t,t);
    	glTexCoord3f(t,-t,t); glVertex3f(t,-t,t);
    	glTexCoord3f(t,t,t); glVertex3f(t,t,t); 	
    glEnd();
     
    // Réinitialisation de la matrice ModelView
    glPopMatrix();
    }
    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
     
    int main(int argc, char* argv[]){
      remplissageTableau();
      initKeystate();
      glutInit(&argc, argv);
      glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
      glutInitWindowSize(800, 600);
      glutInitWindowPosition(50, 50);
      glutCreateWindow("Affichage 3D");
      char* extensions = (char*) glGetString(GL_EXTENSIONS); 
    if(strstr(extensions, "GL_ARB_texture_cube_map") != NULL)
    {
      id_skybox=initSkybox();
     }
      glutDisplayFunc(Affichage);
      glutIgnoreKeyRepeat(0);
      glutKeyboardFunc(ajoutTableau);
      glutKeyboardUpFunc(retireTab);
      glutMainLoop();
      return 0;
    }
    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
     
    void Affichage(){
      int cote=0;
      int i=0;
      int j=0;
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
    glColor3f( 1.0f, 1.0f, 1.0f );
     
      // Configuration des états OpenGL
      glEnable(GL_DEPTH_TEST);
      glEnable(GL_TEXTURE_CUBE_MAP_ARB); 
      glDisable(GL_LIGHTING);
      // Désactivation de l'écriture dans le DepthBuffer
      glDepthMask(GL_FALSE);
     
      // Rendu de la SkyBox
      drawSkybox( id_skybox );
     
      // Réactivation de l'écriture dans le DepthBuffer
      glDepthMask(GL_TRUE);
     
      // Réinitialisation des états OpenGL
      glDisable(GL_TEXTURE_CUBE_MAP_ARB); 
     
      // Puis la suite de mon code mais qui n'a pas d'importance je suppose

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Bon, eh bien problème résolu ^^
    Je ne travaillais pas dans la bonne matrice ^^'

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

Discussions similaires

  1. Problème de Skybox toute blanche
    Par Mssp704 dans le forum Ogre
    Réponses: 7
    Dernier message: 03/12/2009, 01h06
  2. Problème de rendu de skybox
    Par skillz4street dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/11/2008, 14h42
  3. Skybox: problème avec les arrêtes
    Par milena dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 16/08/2008, 20h16
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 15h18
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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