Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lumiere ambiante

Opengl

    27 mai 2008 à 18:47:10

    Tout d'abord le code^^ :
    #include <iostream>
    #include <stdlib.h>
    
    #include <gl\glut.h>
    
    using namespace std ;
    
    void Clavier(unsigned char KeyPress, int x, int y)
    {
    switch (KeyPress)
    {
    case 27 : exit(0) ;
    }
    }
    
    void InitRendering(void)
    {
    glEnable(GL_DEPTH_TEST) ;
    glEnable(GL_COLOR_MATERIAL) ;
    glEnable(GL_LIGHTING) ;
    glEnable(GL_LIGHT0) ;
    glEnable(GL_LIGHT1) ;
    glEnable(GL_NORMALIZE) ;
    }
    
    void Resize(int w, int h)
    {
    glViewport(0,0,w,h) ;
    
    glMatrixMode(GL_PROJECTION) ;
    glLoadIdentity() ;
    gluPerspective(45.0, (double)w/(double)h, 1.0, 200.0) ;
    }
    
    float _angle = 10.0 ;
    void Affichage()
    {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;
    glMatrixMode(GL_MODELVIEW) ;
    glLoadIdentity() ;
    
    glTranslatef(0.0f, 0.0f, -10.0f) ;
    
    // Ajoute une lumière ambiante
    GLfloat AmbientColor[] = {0.2f, 0.2f, 0.2f, 1.0f} ; // couleur (2.0, 2.0, 2.0)
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, AmbientColor) ;
    
    //Positonne un spot
    
    
    glPushMatrix() ;
    glRotatef(_angle, 0.0f, 1.0f, 0.0f) ;
    
    glBegin(GL_QUADS) ;
    
    //devant
    glColor3f(0.0f, 1.0f, 0.0f) ;
    glVertex3f(1.0f, 1.0f, 0.0f) ;
    glVertex3f(1.0f, -1.0f, 0.0f) ;
    glVertex3f(-1.0f, -1.0f, 0.0f) ;
    glVertex3f(-1.0f, 1.0f, 0.0f) ;
    
    //derrière
    glColor3f(1.0f, 0.0f, 0.0f) ;
    glVertex3f(1.0f, 1.0f, -2.0f) ;
    glVertex3f(1.0f, -1.0f, -2.0f) ;
    glVertex3f(-1.0f, -1.0f, -2.0f) ;
    glVertex3f(-1.0f, 1.0f, -2.0f) ;
    
    //droite
    glColor3f(0.0f, 0.0f, 1.0f) ;
    glVertex3f(1.0f, 1.0f, -2.0f) ;
    glVertex3f(1.0f, -1.0f, -2.0f) ;
    glVertex3f(1.0f, -1.0f, 0.0f) ;
    glVertex3f(1.0f, 1.0f, 0.0f) ;
    
    //gauche
    glColor3f(1.0f, 1.0f,1.0f) ;
    glVertex3f(-1.0f, -1.0f, -2.0f) ;
    glVertex3f(-1.0f, 1.0f, -2.0f) ;
    glVertex3f(-1.0f, 1.0f, 0.0f) ;
    glVertex3f(-1.0f, -1.0f, 0.0f) ;
    
    
    glEnd() ;
    glPopMatrix() ;
    
    glutSwapBuffers() ;
    }
    
    void update(int valeur)
    {
    _angle += 1 ;
    if (_angle > 360)
    {
    _angle -= 360 ;
    }
    
    glutPostRedisplay() ;
    glutTimerFunc(25, update, 0);
    }
    
    int main(int charc, char** charv)
    {
    glutInit(&charc, charv) ;
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) ;
    glutInitWindowSize(700, 700) ;
    glutCreateWindow("Essayons de comprendre l'éclairage avec Faucheuse ^^") ;
    
    InitRendering() ;
    glutKeyboardFunc(Clavier) ;
    glutReshapeFunc(Resize) ;
    glutDisplayFunc(Affichage) ;
    glutTimerFunc(25, update, 0);
    
    glutMainLoop() ;
    return 0 ;
    }
    



    Je pense ne pas avoir tres bien compris le principe de la lumiere ambiente^^, pourquoi une de mes faces de cube est plus eclairé et pas les autres? j'en suis aussi venu a me demander du coup : la lumiere ambiente est elle émise depuis le milieu de la scene??

    Merci d'avance pour vos reponses
    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2008 à 20:09:31

      Je t'ai répondu dans l'autre thread. Tu n'as pas activé la lumière.
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        27 mai 2008 à 21:04:06

        Salut, je te fais un petit message pour t'aider a avoir de bonnes réponses.

        1) tu peux modifier un message, pas obligé de le réécrire si on te demande de modifier quelque chose.

        2) Parlant de modification, ce serait bien si tu indentais ton code proprement avec des niveaux de 4 espaces.
        • Partager sur Facebook
        • Partager sur Twitter
          27 mai 2008 à 21:23:36

          Citation : Nanoc

          Je t'ai répondu dans l'autre thread. Tu n'as pas activé la lumière.


          Bah euh, si ? Je dirais plutôt qu'il n'a pas spécifié de normales à ses faces.
          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2008 à 21:26:30

            Désolé, ca a évolué d'un post à l'autre il me semble....
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              27 mai 2008 à 21:54:48

              Nan le code a pas changé du tout, essaye de compiler et executer le code, et tu verra ce qui se passe, je veux juste comprendre pourquoi la lumiere s'estompe et reviens.

              PS : Merci MatteX pour ta compréhension XD, pour le code dsl je n'ai pas encore l'habitude de poster ici. se sera fait la prochaine fois^^

              EDIT : Je precise tout de meme que le code fonctionne, pas besoin donc de correction quelconque, c'est juste un probleme de compréhension.

              RE-EDIT^^ : J'ai trouvé pourquoi : en fait comme on peut le voir, j'initialise deux lumieres : glEnable(GL_LIGHT0) et glEnable(GL_LIGHT1).

              Je pensais que seulement les initialiser ne les affichait pas mais apperement si.
              Quand je les desactive je n'ai plus aucune lumiere apart la lumiere ambiante.
              Merci a ceux qui se sont interresé a mon sujet.
              • Partager sur Facebook
              • Partager sur Twitter

              Lumiere ambiante

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown