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 :

Problème de lumière


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Par défaut Problème de lumière
    Bonjour,

    Je crois avoir un problème avec le positionnement de ma lumière. J'arrive à la placer dans la scène mais je désire qu'elle reste à la position que je lui es donné mais j'ai l'impression qu'elle bouge avec la scène.

    J'ai placé une caméra à une position et la lumière à la même position au départ. Lorsque je déplace la caméra à l'aide de rotation, j'ai l'impression que c'est la scène qui se déplace et non pas ma caméra et ma lumière, ce qui fait que ma lumière tourne autour de ma scène. J'ai essayer de trouver un moyen de ne pas faire tourné ma scène mais je crois ne pas bien m'y prendre et j'ai besoin d'un petit coup de main pour m'indiquer une bonne technique à utiliser.

    Voici du code de la fonction d'affichage qui pourrait aider ( C# )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
     
    GL.glMatrixMode(GL.GL_MODELVIEW);
    GL.glLoadIdentity();
     
    GLU.gluLookAt(20.0, 60.0, 120.0, 0, 0, 0, 0, 1, 0);
    GL.glRotatef(YCam, 0.0f, 1.0f, 0.0f);
     
    // Ici je fait la création et la manipulation des objets de ma scène
    ...
     
    GL.glFlush();
    WGL.wglSwapBuffers(m_uint_DC);
    YCam augmente ou diminue selon la flèche droite ou gauche

    J'ai beau essayer plein de chose, la lumière éclaire toujours en face de moi.

    Merci de votre aide

    DestinyWar

  2. #2
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    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 580
    Par défaut
    le principe de caméra n'existe pas, en fait on simule une caméra en déplacer toute la scène avec les paramètres inverses
    si tu veux une caméra placée en x=3, tu déplaces ta scène de x=-3
    pareil avec les rotations

    gluLookAt permet de simuler une caméra facilement
    si après gluLookAt tu effectues des rotations et des translations c'est tes objets ou ta scène qui vont bouger
    tu a bien le principe des pushmatrix et popmatrix en tête également ?
    c'est très important pour manipuler les transformations
    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.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Par défaut
    Ça voudrais dire que la lumière ne se déplace pas en même temps que la scène? Qu'elle ne reste pas à la position que je l'ai mise au début dans la scène?

    Je connais le principe des matrices de transformation mais je ne suis pas encore expert pour toujours bien les utiliser. J'ai fait plusieurs essais en les placant à différent endroit dans mon code mais j'obtient toujours le même résultat. Je ne sais plus trop où je devrais mettre ma lumière. Peut-être que je ne la place pas au bon endroit. Elle est situer dans le setup, donc appeler une fois au début du programme.

    DestinyWar

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    J'ai le même genre de problème même si n'utilise pas 'gluLookAt' pour les transformations de caméra.La position de ma lumière ne semblait pas être affectée par les transformations de caméra passée en matrice 'GL_MODELVIEW'.
    J'ai donc passé mes transformations de caméra sur la matrice 'GL_PROJECTION', ça a résolu mon problème.
    Un truc à essayer pour toi serait peu être de passer la matrice active à 'GL_PROJECTION' avant de faire gluLookAt puis de repasser sur la matrice 'GL_MODELVIEW' pour ta scène.
    En espérant que ça puisse t'aiguiller

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Par défaut
    Citation Envoyé par fanoplusplus64k
    Un truc à essayer pour toi serait peu être de passer la matrice active à 'GL_PROJECTION' avant de faire gluLookAt puis de repasser sur la matrice 'GL_MODELVIEW' pour ta scène.
    En espérant que ça puisse t'aiguiller
    On peut faire des transformations de type rotation sur la matrice de projection?

    DestinyWar

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    Voui, tout comme la matrice de texture et de modelisation.Les rotations et translations ne font que modifier la matrice tout comme gluLookAt.Pour exemple, le bout de code de ma caméra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    glMatrixMode($$GL_PROJECTION)
    glLoadMatrixf(&GFXp.vMatrix[])
    glRotatef(cam.vAngles.x,1,0,0)
    glRotatef(cam.vAngles.y,0,1,0)
    glRotatef(cam.vAngles.z,0,0,1)
    glTranslatef(-xp,-yp,-zp)
    glMatrixMode($$GL_MODELVIEW)

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Par défaut
    Ok, merci je vais essayer ça

    DestinyWar

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Par défaut
    Bonjour,

    J'ai essayé de faire des transformations dans la matrice de projection et ca semble fonctionner, la caméra semble se déplacer et la lumière reste là ou elle doit mais j'ai un autre problème. Je trouve pas la manière pour faire tourné la caméra autour de mon objet. Pour le moment, je lui donne un angle et elle tourne de cet angle à chaque nouveau frame.

    Par exemple, je lui dit de tourné autour de l'axe des X de 5.0 mais je désire qu'elle reste à cette position sauf qu'au prochain frame elle est rendu à 10 degré, 15 degrée etc... J'ai essayer de mettre des pushmatrix et des popmatrix mais elle reste fixe dans ce cas. Comment je pourrais lui dire de faire une rotation pour la positionner et la rester à cette position là au autre frame?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    GL.glMatrixMode(GL.GL_PROJECTION);
    GL.glRotatef(5.0f, 1.0f, 0.0f, 0.0f);
    GL.glTranslatef((float)-posX, (float)-posY, (float)-posZ);
    GL.glMatrixMode(GL.GL_MODELVIEW);
    DestinyWar

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut
    Toutes tes transformations sont cumulatives tant que tu n'as pas rechargé la matrice, le fait de swapper les buffers par exemple, ne recharge pas la matrice et tes transformations s'ajouteront à celles de la frame précédente.

    Un 'glLoadIdentity' après 'GL.glMatrixMode(GL.GL_PROJECTION)' te remets la matrice d'identité (enlevant par là même l'effet d'un 'gluPerspective' si tu l'as utilisé).
    Une autre solution est de sauvegarder la matrice (push) avant de la modifier et de la récuperer (pop) après avoir rendu ta scène.

Discussions similaires

  1. probléme de lumiére d'écran avec samsung R530
    Par unix27 dans le forum Windows XP
    Réponses: 11
    Dernier message: 02/12/2011, 00h18
  2. Problème de lumiére OpenGL 3.3
    Par manrugby dans le forum OpenGL
    Réponses: 9
    Dernier message: 03/10/2011, 17h32
  3. problème de lumière
    Par blueLight dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/09/2008, 12h19
  4. [Débutant] Problème de lumières ...
    Par Lung dans le forum OpenGL
    Réponses: 15
    Dernier message: 14/12/2005, 11h01

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