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 :

GluLookAt() camera inversée


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Par défaut GluLookAt() camera inversée
    Bonjour a tous, je serais vraiment heureux si vous pouviez m'aider a résoudre mon petit probleme !!!

    Je fais du openGL depuis quelque temps et j'utilise gluLookAt() pour les déplacements de ma caméra suivit de glRotate pour tourner.

    Mais lors que je tourne en arriere de mon objet, les axes se retrouves inversées et je navigue a l'envers.

    J'ai essayé de changer le "up vector" lorsque j'arrive en arrière mais ca ne me donne pas rien de fluide et je n'arrive pas a le setter correctement.
    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
     
    int DrawGLScene(GLvoid)									
    {
      int i;
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	
    	glLoadIdentity();			
     
      gluLookAt(camPosition.X, camPosition.Y, camPosition.Z, camTarget.X, camTarget.Y, camTarget.Z, 0.0f,upVector, 0.0f);	
     
      glPushMatrix();
        glTranslatef(camTarget.X, camTarget.Y, camTarget.Z);
        glRotatef(rotAngle.Y,0.0f,1.0f,0.0f);
        glRotatef(rotAngle.X,1.0f,0.0f,0.0f);
        glTranslatef(camTarget.X*-1, camTarget.Y*-1, camTarget.Z*-1);
        for (i = 1; i != NbMesh()+1; ++i)
          glCallList(i); 
      glPopMatrix();   
     
    	CheckMouse();         // Look for mouse movement
     
    	return TRUE;	
    }
    Si vous trouvez étrange que je fasse 2 transformations dans mon glPushMatrix c'est prace que la pluspart de mes modèles ne sont pas centrer a l'origine (et c'est voulu) mais avec cest translatation avant la rotation, je tourne autour du centre de mon modele. (un simili arcball rotation!) En réalité je tourne autour du target de la caméra.

    camPosition et camTarget sont des vecteurs que je détermine lorsque j'ouvre le modele. Le target est initialiser au centre de la mesh ma se deplace avec la camera lorsqu'elle fait une translation.

    Y aurait-il pas un moyen de tourner uniquement les objets et non la camera ou encore, connaissez-vous une solutions a mon probleme ?

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Par défaut
    Bon jai résolue une partie du probleme

    glTranslatef(camTarget.X, camTarget.Y, camTarget.Z);
    ...Rotation...
    glTranslatef(camTarget.X*-1, camTarget.Y*-1, camTarget.Z*-1);

    Sans les glTranslate il n'y a pas de probleme de navigation par contre l'objet ne tourne plus sur son centre. Quelqu'un a une idée ??

    (jai oublié de mentioné que le centre de l'objet est aussi le target de la camera, ca aide pour comprendre le probleme !!!)

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut
    dans glulookat( , , , , , , , )
    je rentre mes 3 premieres valeurs par la position ou je suis
    les 3 suivantes je rentre x+1000*cos alphahorizontal, y+1000*sin alphaHoriz,
    z+1000*tan alphavertical,
    et les 3 dernieres je met 0,0,1.

    Si ca peut t'aider 1000 est une distance arbitraire pour situer mon point de visé.

  4. #4
    Membre éprouvé Avatar de razmott
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Par défaut
    Salut !

    Je ne sais pas comment implémenter de solution mais je pense savoir pourquoi ça ne marche pas :

    Lorsque tu modifies la matrice courante, en réalité tu modifies le repère. Ainsi, tu déplaces également les axes. Donc suite à la rotation, les axes ne sont plus dans les bonnes directions. Ainsi le glTranslate ne marche plus correctement.

    Une solution consisterait peut-être à utiliser l'inverse de la matrice de translation. J'avais en effet eu le même problème et en calculant l'inverse avec l'ordi tout rentrait dans l'ordre.
    Sinon, peut-être que les quaternions pourrait t'aider, mais là je nage un peu...

    Mais le plus simple est d'utiliser glLookAt pour toutes les transformations comme te le propose javator.

    Bon coding !
    @+

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Par défaut
    Merci beaucoup les gars. En réécrivant le programme d'une autre façon et dans un autre environnement j'ai corrigé ce qui n'allait pas. Je ne suis pas sur encore de savoir exactement ce que c'était mais j'ai éliminé glulookat() et j'utilise uniquement les glTranslate et glRotate

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

Discussions similaires

  1. Controle de la camera : gluLookat et gluperspective
    Par GloW_on_dub dans le forum OpenGL
    Réponses: 5
    Dernier message: 09/07/2010, 19h08
  2. Réponses: 46
    Dernier message: 19/04/2010, 21h11
  3. Changement angle camera avec glulookat()
    Par Despak dans le forum OpenGL
    Réponses: 3
    Dernier message: 28/02/2007, 10h16
  4. Redefiniton de la camera avec gluLookAt();
    Par AliceD dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/08/2006, 18h44
  5. Camera en opengl avec gluLookAt
    Par Happy dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/07/2005, 16h10

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