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 :

Résultat étrange avec les lumières.


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Résultat étrange avec les lumières.
    Bonjour, j'ai réussi à calculer les normales moyennes pour chaque point. Et cela marche relativement bien en intérieur, mais j'ai quelques problèmes pour afficher un spot dirigé vers le sol. Voici deux screenshot pour que vous compreniez rapidement le problème (il y a un spot qui éclaire vers le bas la boule au centre du monde) :

    Là ça marche :

    http://www.mathieueylert.com/boule.jpg

    et voilà le problème :

    http://www.mathieueylert.com/boule2.jpg


    Même quand je suis très loin de mon spot, le sol réfléchi bêtement la lumière spéculaire, je ne comprends pas d'où ca vient, voilà les réglages de ma lumières et des matériaux :

    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
    // spot
    LUMIERE_DIFFUSE 1.0 1.0 1.0 1.0
    LUMIERE_SPECULAR 1.0 1.0 1.0 1.0
    LUMIERE_AMBIENT 1.0 1.0 1.0 1.0
    LUMIERE_POSITION 0.0 1.0 0.0 1.0
    CUTOFF 180
    EXPONENT 0.0
    DIRECTION 0.0 -1.0 0.0
    LINEAR_ATTENUATION 1.0
     
     
    // réglage matériaux
    MATERIAL_DIFFUSE 1.0 1.0 1.0 1.0
    MATERIAL_SPECULAR 1.0 1.0 1.0 1.0
    MATERIAL_AMBIENT 0.0 0.0 0.0 1.0
    MATERIAL_EMISSION 0.0 0.0 0.0 1.0
    SHININESS 10

    voilà le code qui paramètre le tout :
    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
     
    /* On parametre la source de lumiere */
    glLightfv(light, GL_DIFFUSE, diffuseLight[i]);
    glLightfv(light, GL_SPECULAR, specularLight[i]);
    glLightfv(light, GL_AMBIENT, ambientLight[i]);
    glLightfv(light, GL_POSITION, positionLight[i]);
     
    /* On parametre le spot */
    glLighti(light, GL_SPOT_CUTOFF, cutoff);
    glLightfv(light, GL_SPOT_DIRECTION, direction);
    glLightf(light, GL_SPOT_EXPONENT, exponent);
    glLightf(light, GL_LINEAR_ATTENUATION, linear_attenuation);
     
    /* Pour rendre les materiaux (textures) brillants */
    glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
     
    /* L'oeil est dans la scene, plus realiste */
    glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
     
    /**************************************
     * On parametre les materiaux
     *************************************/
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuseMaterial);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularMaterial);
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambientMaterial);
    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emissionMaterial);
     
    /* Brillance du materiau */
    glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, shininess);

    bref, tout m'a l'air correct, je ne vois pas pourquoi ça fait ça. De toute façon le résultat est moyen quand il n'y a pas beaucoup de face sur un objet, je vais devoir faire de la lumière par vertex.

    Est ce que quelqu'un a déjà fait ça et pourrais me dire où je pourrais trouver un tuto ou un bout de code bien commenté, qui explique bien le principe, car je pense qu'il faut passer par une extension openGL. J'ai trouvé un ou deux bouts de codes, mais sans aucun commentaires, pas indentés, ni rien donc inutilisable...

    Merci pour votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    J'est trouvé d'où vient le problème je pense...

    En fait le spot est toujours au dessus de moi, quand je marche, il se déplace en même temps que moi au lieu de rester à sa place. Bref, il n'est pas fixe...

    Ce qui fait que le reflet sur la boule se déplace quand, je me deplace, et que le sol sous mes pieds est toujours eclairé, tandis que le sol ou les boules sont, ne l'est plus.

    Comment fixé le spot, de manière à ce qu'il ne me suive plus?

    Merci.

  3. #3
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    ça dépend de l endroit ou tu set la position de la lumière et là ou tu change la position de la caméra (matrix modelview)
    Pensez aux tutoriels programmation : http://programmation.developpez.com/cours-tutoriels/

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Je set la position de la lumière, à l'initialisation...

    Le prob est qu'avant d'afficher mon monde, je fais un glTranslatef et rotatef, pour placer mon heros dans le monde. Je pense qu'il faut que je réajuste la position des lumières après chaque placement du héros, n'est ce pas?

    Enfin, je vais essayer quand j'aurais le temps.

  5. #5
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Il faut que tu utilises glPushMatrix() et glPopMatrix()

    entre les 2 tu déplaces ton perso et tu l'affiches

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //speudo code
    glPushMatrix();
     SetPlayerPosition();
     DrawPlayer();
    glPopMatrix();
    donc ta lumière devrais rester au même endroit car en dehors de glPushMatrix() et glPopMatrix()

Discussions similaires

  1. Comportement étrange avec les index et "order by"
    Par Dia_FR dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/08/2008, 09h18
  2. Une chose étrange avec les Sub
    Par supertoms dans le forum VBA Access
    Réponses: 5
    Dernier message: 28/04/2008, 19h02
  3. Rendu étrange avec les VBOs! Besoin d'aide
    Par kaliban dans le forum OpenGL
    Réponses: 11
    Dernier message: 06/09/2007, 00h09
  4. Problème d'affichage avec les lumières
    Par Glosialabolas dans le forum OpenGL
    Réponses: 3
    Dernier message: 02/11/2006, 18h46
  5. Problèmes avec les lumières
    Par Blackhorn dans le forum OpenGL
    Réponses: 2
    Dernier message: 27/12/2004, 12h14

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