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 :

Source de lumiere


Sujet :

OpenGL

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut Source de lumiere
    Salut , j'essaie d'afficher un objet simple en 3D que j'ai dessiné, j'essaie de lui ajouter une source de lumière mais on ne vois pas de différence de couleurs entre les différentes faces, voici le source ou j'utilise GL:
    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
    Star::Star() {
        squeletteX={0.0, 0.4, 1.0, 0.6, 0.8, 0.0, -1.0, -0.4, -1.0, -0.2, 0.0};
        squeletteY={1.0, 0.4, 0.4, 0.0, -0.8, -0.4, -1.0, 0.0, 0.4, 0.4, 1.0};
     glEnable(GL_DEPTH_TEST);
     glEnable(GL_LIGHTING);
     glEnable(GL_LIGHT0);
       glMatrixMode(GL_MODELVIEW);
    }
    void Star::affiche() {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glMatrixMode(GL_MODELVIEW);
      int couleur[2][3]={{137, 169, 231}, {70, 131, 83}};
        int flagCouleur=0;
        int indexCouleur=0;
        double z1=0.1, z2=-0.1;
           glBegin(GL_QUADS);
       for(int i=0;i<10;i++)
        {
               flagCouleur++;
            indexCouleur=flagCouleur%2;
            //glColor3ub(couleur[indexCouleur][0], couleur[indexCouleur][1], couleur[indexCouleur][0]);
            glVertex3d(squeletteX[i] ,squeletteY[i] , z1);
            glVertex3d(squeletteX[i+1], squeletteY[i+1], z1);
            glVertex3d(squeletteX[i+1], squeletteY[i+1], z2);
            glVertex3d(squeletteX[i] ,squeletteY[i] , z2);
       }
             glEnd();
         glRotated(45,0,0,1);
         glRotated(45,0,0,1);
        glRotated(45,1,0,0);
       glFlush();
        SDL_GL_SwapBuffers();
    }
    Merci pour vos réponses

  2. #2
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    les lumières en openGL ont besoin d'au moins 3 choses :
    - les activer
    - les positionner
    - des normales

    l'activation passe par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    ensuite il faut la positionner
    (a faire avant la déclaration des quads)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glLightiv(GL_LIGHT0, GL_POSITION, lightpos);
    //où lightpos est un int	lightpos[4] formant les coordonnés de la source lumineuse
    //int	lightpos[4] = {-6000, 8000, 10000, 0};
    //pour une source assez haute et décalé en négatif sur les x
    puis les normales
    c'est là que ca se complique, une normale à un plan est un vecteur perpendiculaire a ce plan.
    cette normale va servir à OpenGL pour savoir comment est orienté le plan dans l'espace.
    au passage, un plan est composé de 4 vertices, par conséquent, il faut avoir déclarer pour un plan la meme normale pour les 4 vertices

    ça c'est à vous de le coder
    mais typiquement un plan horizontal se décrira comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    glBegin(GL_QUADS); //on declare le type d'objet
     
    glNormal3d(0, 0, 1); //on déclare que les prochains vertices auront la normale orienté en z
    glVertex3d(0, 0, 0);
    glVertex3d(0, 1, 0);
    glVertex3d(1, 1, 0);
    glVertex3d(1, 0, 0);
     
    glEnd(); //fin
    ceci ne fonctionne que sur les plans qui seront toujours horizontaux
    si vous appliquez des rotations dessus, la normale de votre plan devra alors être modifiée (cf : rotation)
    i = i++;

Discussions similaires

  1. Source de lumière sur triangularisation
    Par dazhoid dans le forum MATLAB
    Réponses: 7
    Dernier message: 28/11/2006, 11h04
  2. [Crystal Report 8] créer une source de données oracle
    Par Lina dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 14/11/2002, 13h53
  3. Source Safe -> VC++
    Par Emilio dans le forum MFC
    Réponses: 7
    Dernier message: 07/11/2002, 15h57
  4. Outil de reformatage d'un source Pascal
    Par HRS dans le forum Pascal
    Réponses: 7
    Dernier message: 21/10/2002, 14h55
  5. mp3 et source
    Par davlefou dans le forum C
    Réponses: 2
    Dernier message: 18/10/2002, 15h01

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