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 :

Probleme éclairage uniforme simple


Sujet :

GLUT

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut Probleme éclairage uniforme simple
    Bonjour,
    je code un mini jeu vidéo 3D à l'aide de Glut et OpenGL. Je fais se déplacer la caméra dans une pièce rectangulaire contenant des objets type sphères cubes etc... Jusqu'ici rien de bien compliqué. J'ai commencé par faire un rendu en Fil de Fer de mes formes, et tout marche très bien. J'utilisais par exemple la fonction glutWireSphere() pour faire une sphère. Maintenant je souhaite voir ce que cela donne en solide (glutSolidSphere()) mais je me confronte à des problèmes d'éclairage. Je souhaite juste avoir un éclairage très simple, ne dépendant pas de la position de la camera et me permettant de voir tous les objets (dans la couleur qu'ils ont) dans mon angle de vision.

    J'ai pour cela décidé de placer les commandes d'éclairage avant mes commandes de visualisation (glTranslated et glRotated) qui me permettent de faire bouger la camera. Ainsi j'espérais avoir un éclairage qui s'applique après que tout ait été calculé. Mais il reste des zones d'ombres, et tous les objets apparaissent blancs (couleur que j'ai donné a la lumière) alors qu'ils ont une couleur. J'ai donc mis 4 lumières à des positions proches de l'origine de la camera, mais rien n'y fait. De plus j'ai l'impression de voir à l'intérieur des cubes... Quelqu'un peut il m'aider ?

    Voici le code de ma fonction d'affichage :
    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
     
     
             glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
             glLoadIdentity();
             glScaled((double)screen_y/(double)screen_x,1,1);
     
    	  /* Eclairage */
    	  GLfloat L0pos[]={0.,mHauteur/2.,-0.3};
    	  GLfloat L1pos[]={0.,mHauteur/2.-0.1,-0.3};
    	  GLfloat L2pos[]={0.,mHauteur/2.+0.1,-0.3};
    	  GLfloat L3pos[]={0.,mHauteur/2.,0.};
    	  glLightfv(GL_LIGHT0,GL_POSITION,L0pos);
    	  glLightfv(GL_LIGHT1,GL_POSITION,L1pos);
    	  glLightfv(GL_LIGHT2,GL_POSITION,L2pos);
    	  glLightfv(GL_LIGHT3,GL_POSITION,L3pos);
     
    	  /*Application des transfos de visualisation */ 
    	  glRotated((*pPointDeVue)->Phi(),0.0,1.0,0.0);
    	  glRotated((*pPointDeVue)->Theta()-90,(*pPointDeVue)->CosAngle(),0.0,(*pPointDeVue)->SinAngle());
    	  glTranslatef(-(*pPointDeVue)->X(),-(*pPointDeVue)->Y(),-(*pPointDeVue)->Z());
     
    	  glPushMatrix();
     
    	  /* Dessin de la piece */  
    	  glColor3d(mCouleur.GetR(),mCouleur.GetV(),mCouleur.GetB());
    	  glTranslated(0,mHauteur/2.,0);
    	  glScaled(mLargeur,mHauteur,mLongueur);
    	  glutSolidCube(1);
     
              /*AFFICHAGE DE TOUTES MES FORMES*/
     
              glFlush();
              glutSwapBuffers();
    Voici le code de ma fonction d'initialisation (juste les commandes pour la lumière) :

    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
     
    /* initialisation de glut et creation de la fenetre */
      glutInit(argc,argv);
      glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
      glutInitWindowPosition(200,200);
      glutInitWindowSize(screen_x,screen_y);
      glutCreateWindow("X");
     
      /* Initialisation d'OpenGL */
      glClearColor(0.0,0.0,0.0,0.0);
      glPointSize(1.0);
     
      /* Mise en place de la perspective */
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluPerspective(64.0,1.0,0.1,40.0);
      glMatrixMode(GL_MODELVIEW);
     
      GLfloat L0dif[]={0.7,0.7,0.7};
      GLfloat Mspec[]={0.5,0.5,0.5};
      GLfloat Mshiny=50;
     
      /* Paramétrage de la lumiere */
      glShadeModel(GL_SMOOTH);
      glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);
      glEnable(GL_LIGHTING);
      glEnable(GL_LIGHT0);
      glEnable(GL_LIGHT1);
      glEnable(GL_LIGHT2);
      glEnable(GL_LIGHT3);
      glLightfv(GL_LIGHT0,GL_DIFFUSE,L0dif);
      glLightfv(GL_LIGHT0,GL_SPECULAR,L0dif);
      glLightfv(GL_LIGHT1,GL_DIFFUSE,L0dif);
      glLightfv(GL_LIGHT1,GL_SPECULAR,L0dif);
      glLightfv(GL_LIGHT2,GL_DIFFUSE,L0dif);
      glLightfv(GL_LIGHT2,GL_SPECULAR,L0dif);
      glLightfv(GL_LIGHT3,GL_DIFFUSE,L0dif);
      glLightfv(GL_LIGHT3,GL_SPECULAR,L0dif);
     
      /* Paramétrage du matériau */
      glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,Mspec);
      glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,Mshiny);
    J'attache à mon post une image de mon rendu ...

    Merci beaucoup !
    Images attachées Images attachées  

Discussions similaires

  1. probleme avec une simple requete
    Par nassimmm dans le forum Langage SQL
    Réponses: 11
    Dernier message: 03/08/2006, 17h46
  2. Ksh, problème avec une simple boucle for
    Par herzleid dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2006, 14h45
  3. [FreePascal] Problème pour une simple liste chaînée
    Par piff62 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 26/11/2005, 19h25
  4. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 18h57
  5. Réponses: 17
    Dernier message: 16/07/2004, 12h19

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