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 :

Changement angle camera avec glulookat()


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Par défaut Changement angle camera avec glulookat()
    Bonjour à tous,

    j'essaye de gérer ma caméra dans un environnement 3D.

    On part d'une vue de "haut" ( vers les z négatif ).

    Ce que j'arrive à faire pour le moment c'est :

    - zoomer/dézoomer
    - regarder à gauche/droite
    - regarde en bas/haut.

    Et ce grâce à ce code :

    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
     
    void modul_cam(){
     
       	gluLookAt(0.0,0.0,60.0,  0.0,0.0,0.0,  0.0,1.0,0.0);
     
     
    	glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
    	gluPerspective(50.0-cam_z ,1.0,0.1,100.0);   
    	glTranslatef(0.0-cam_x,0.0-cam_y ,0.0 );
    	glRotatef(-IDC.cam_rot_(),0.0,0.0,1.0);
    	glMatrixMode(GL_MODELVIEW);  
     
     
    }
    Maintenant ce que je voudrais c'est bouger ma caméra pour qu'elle regarde un peu en oblique vers le bas, un peu comme dans les jeux de stratégies.
    Je modifie mon code de cette façon :

    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
     
    void modul_cam(){
     
    	if( IDC.vue_de_haut_() )
       	gluLookAt(0.0,0.0,60.0,  0.0,0.0,0.0,  0.0,1.0,0.0);
           if( !IDC.vue_de_haut_() )
       	gluLookAt(-30.0,0.0,60.0,  0.0,0.0,0.0,  0.0,1.0,0.0);
     
    	glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
    	gluPerspective(50.0-cam_z ,1.0,0.1,100.0);   
    	glTranslatef(0.0-cam_x,0.0-cam_y ,0.0 );
    	glRotatef(-IDC.cam_rot_(),0.0,0.0,1.0);
    	glMatrixMode(GL_MODELVIEW);  
     
     
    }
    Quand je fais ça, le changement dans glutLookAt n'est pas effectué.

    Quelqu'un aurait une idée svp ?

  2. #2
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 583
    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 583
    Par défaut
    à première vue, c'est étonnant que ça fonctionne (pour la première partie)
    normalement on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            gluPerspective(50.0-cam_z ,1.0,0.1,100.0);
    transformation de la matrice pour la caméra, gluLookAt par exemple
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
    dessin de la scène
    faire le gluLookAt avant me semble totalement anormal
    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 averti
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Par défaut
    Donc si j'ai bien compris l'ordre est le suivant :

    -configuration de la caméra
    =>
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(50.0-cam_z ,1.0,0.1,100.0);

    ( et si on veut laisser la caméra tel quel on a pas besoin d'utiliser gluPerspective, je suppose ).

    - Positionnement de la camera ( avec gluLookAt par exemple )
    - puis dessin de la scène.

    Je suppose qu'il s'agit d'une sorte de canevas.

    Faut-il toujours activer la matrice GL_MODELVIEW avant d'utiliser gluLookAt ??
    Si oui, je suppose que c'est parce que le positionnement de la camera est en réalité le déplacement des objets de la scène qui donne cette impression de distance avec la caméra, gluLookAt ne faisant que nous simplifier la vie.

  4. #4
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 583
    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 583
    Par défaut
    Citation Envoyé par Despak
    ( et si on veut laisser la caméra tel quel on a pas besoin d'utiliser gluPerspective, je suppose ).
    erreur, gluPerspective n'a rien à voir avec la caméra au sens propre du terme, il configure le champ de vision, il est nécessire pour configurer la projection comme tu le souhaite (prespective dans le cas de gluPerspective, othogonale dans le cas de gluOrtho2D)

    Faut-il toujours activer la matrice GL_MODELVIEW avant d'utiliser gluLookAt ??
    oui et non, tu peux mettre le gluLookAt après le gluPerspective dans la matrice de projection ou après un glLoadIdentity dans la matrice de transformation globale

    Si oui, je suppose que c'est parce que le positionnement de la camera est en réalité le déplacement des objets de la scène qui donne cette impression de distance avec la caméra, gluLookAt ne faisant que nous simplifier la vie.
    oui ou non tu suppose bien, ou presque, le positionnement de la caméra (qui n'en est pas une) est en réalité le déplacement inverse des objets de ta scène
    par exemple :
    pour avoir une caméra en 0,0,-10 qui regarde un objet en 0,0,0
    (l'axe z est horizontal et indique la profondeur)
    placer ta caméra c'est déplacer ta scène de 0,0,10
    déplacer la caméra de 1,0,0 c'est déplacer ta scène de -1,0,0
    touner de 30° c'est faire tourner ta scène de -30°
    ect...

    et gluLookAt permet effectivement de simplifier tout ça
    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.

Discussions similaires

  1. Redefiniton de la camera avec gluLookAt();
    Par AliceD dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/08/2006, 18h44
  2. Changement d'images avec onclick ou par lien
    Par zubaran dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/07/2006, 22h09
  3. [débutant] suivre un objet 3D avec gluLookAt
    Par Socr@tes dans le forum OpenGL
    Réponses: 8
    Dernier message: 12/06/2006, 17h09
  4. balise marquee, changement de sens avec javascript
    Par zubaran dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/04/2006, 09h54
  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