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 :

Définition d'une lumière "ambient"


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Définition d'une lumière "ambient"
    Bonjour,

    quelle est la façon la plus simple de créer une lumière ambiante d'une couleur donnée ?
    Est-il nécessaire d'en définir la position ?

    En effet ce code produit un résultat étrange :
    l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_AMBIENT, {0.0f, 1.0f, 0.0f, 1.0f});
    le 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
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_DEPTH_BUFFER_BIT);
     
    glMatrixMode(GL_MODELVIEW);
     
    glLoadIdentity();
    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
    glRotated(angle, 0, 1, 0);
     
    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
    glBegin(GL_QUADS);
    	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, {1.0f, 1.0f, 1.0f, 1.0f});
     
    	glVertex3d(-1, 1, 0);
    	glVertex3d(-1, -1, 0);
    	glVertex3d(1, -1, 0);
    	glVertex3d(1, 1, 0);
    glEnd();
    Tout se passe comme si il y avait une lumière ambiante blanche et deux lumière vertes directionnelles placées sur l'axe X comme l'illustrent les miniatures :
    - la 1ère : état initial,
    - la 2ème : après rotation à gauche,
    - la 3ème : après rotation à droite.

    En revanche si dans l'initialisation la lumière "LIGHT0" est positionnée n'importe où l'effet de lumière ambiante est bon :
    le nouveau code d'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_AMBIENT, {0.0f, 1.0f, 0.0f, 1.0f});
    glLightfv(GL_LIGHT0, GL_POSITION, {0, 0, 0, 0});
    Le résultat à est la 4ème miniature; de plus la couleur reste bien la même après rotation.

    Auriez vous des explications sur ce phénomène ?
    Quelle est la bonne façon de définir une lumière ambiante ?

    Merci.
    Images attachées Images attachées     

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 151
    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 151
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Je défini une lumière ambiante comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, colour_array);
    D'après la doc d'OpenGL la GL_LIGHT0 à une position par défault de (0.0, 0.0, 1.0, 0.0)

    Cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, {1.0f, 1.0f, 1.0f, 1.0f});
    Indique que la matière utilisé pour les polygone va être blanche. Ce n'est pas la couleur de la lumière, mais la couleur de l'objet ( que tu va éclairer ).
    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 Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Merci beaucoup de ta réponse.

    En effet spécifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, {0, 1, 0, 1});
    est suffisant.

Discussions similaires

  1. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12

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