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 :

Couleur spéculaire et brillance


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Par défaut Couleur spéculaire et brillance
    Bonsoir!

    Je suis actuellement en train de lire le chapitre sur les lumières avec OpenGL, et je devrai avoir un rendu que je n'obtient pas.

    Voilà ce que je devrai avoir:


    Et voilà ce que j'obtient:
    http://img299.imageshack.us/my.php?image=78444204.png

    Et enfin, le code minimal (initialisation d'OpenGL et rendu):
    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
     
    GLUquadricObj* quadric = NULL;
     
    int matSpec[4] = {1, 1, 1, 1};
     
    bool initOpenGL() {
        // Définir la couleur d'arrière plan.
        glClearColor(0.f, 0.f, 0.f, 0.f);
     
        // Parametrer la matrice de projection.
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(40.0, (double)640/480, 1, 500);
     
        // Activer le teste de profondeur.
        glEnable(GL_DEPTH_TEST);
     
        // Activer état OpenGL.
        glEnable(GL_COLOR_MATERIAL);
     
        // Activier la lumière n°0.
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
     
        // Générer et parametrer le quadric.
        quadric = gluNewQuadric();
        gluQuadricDrawStyle(quadric, GLU_FILL);
        gluQuadricNormals(quadric, GL_FLAT);
     
        return true;
    }
     
    void render() {
        // Vider les tampons.
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
        // Placer la caméra.
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(4.0, 4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
     
        glMaterialiv(GL_FRONT_AND_BACK, GL_SPECULAR, matSpec);
        glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128);
     
        // Dessiner une sphère.
        gluSphere(quadric, 1,50, 50);
     
        // Mettre à jour l'écran.
        glFlush();
        SDL_GL_SwapBuffers();
    }
    Merci d'avance!

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 059
    Billets dans le blog
    142
    Par défaut
    Bonsoir,

    Il semblerai juste que le shininess soit trop grand.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128);
    Joue sur la valeur passée à la fonction ( 128 pour le moment )
    Je dirai plus 32 , ou 64 pour plus ressembler à l'image à reproduire
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Par défaut
    Hello, merci de ta réponse
    Déjà, oui, le Shininess était trop grand, mais même après avoir changé j'avais toujours le même résultat.

    J'ai trouvé d'où venais le problème, c'était à cause de cette ligne:
    glEnable(GL_COLOR_MATERIAL);

    Apparament, si on active GL_COLOR_MATERIAL, glMaterial n'a plus d'effet, est-ce ça ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 059
    Billets dans le blog
    142
    Par défaut
    J'ai moi de même un peu de mal avec les materiaux et les lumières, mais lorsque on applique le GL_COLOR_MATERIAl c'est la couleur passée par glColor qui est définie comme couleur pour le matérial. Donc , les couleurs du matérial n'a plus d'effet
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 547
    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 547
    Par défaut
    normalement c'est l'inverse
    glEnable(GL_COLOR_MATERIAL) sert à utiliser tous les appels à glMaterial à la place de glColor
    mais glMaterial est plus lourd à utiliser donc on s'y perd vite quand on n'a pas l'habitude
    cherches des tutoriels sur ce sujet pour avoir plus d'informations
    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
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    A noter que dans OpenGL 3.0, tout ce genre de truc est déprécié, et il faut tout passer dans les shaders (shininess...).

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Par défaut
    ça veut dire que si tu as par exemple 5 objets de "matiere" differentes, il faudra créer 5 shaders différents ?
    *(Pas très à l'aise avec les shaders)*

  8. #8
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Imagine que tu as un objet avec un shininess de 60 et un autre de 180, en fait t'écriras le même shader, sauf que tu passeras une variable à ce shader

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uniform float shininess;
    Et ensuite tu feras tes calculs d'éclairage dans le shader.

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33
  3. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15
  4. Mixage de Couleurs
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 29/05/2002, 13h34
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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