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 :

une croix dans l'espace


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut une croix dans l'espace
    Bonjour je voudrais pouvoir dessiner une croix dans l'espace (x,y,z) qui soit toujours de la même taille à l'écran (que ma caméra recule ou pas) et ne tourne pas (un peu comme les textes 2D dans un espace 3D)

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    il suffit de faire comme pour les text 2d : tu passe en mode orthogonal et tu dessine ta croix en 2D
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    ??? là, moi pas comprendre...
    quand je marquais texte 2D c'etait en exemple de fonction (visuellement) mais j'ai pas dit que je savais le faire

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    dans ta fonction paint/display tu change de projection le temps de dessiner tes informations

    exemple rapide

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    /*Fonction qui affiche la scène*/
    void display ()
    {
     
        glMatrixMode(GL_VIEWMODEL);
        glLoadIdentity();
     
        /*Tu dessines ta scène comme tu le sens*/
     
        /*Tu sauvegardes ta matrice de modélisation*/
        glPushMatrix();
     
            /*Tu passes sur la matrice de projection pour te mettre en mode 2D     pour afficher du texte, des boite de dialoges, etc*/
            glMatrixMode(GL_PROJECTION);
            /*Tu sauvegardes d'abord ta projection actuelle*/
            glPushMatrix();
     
                /*Tu fais un projection 2D*/
                glLoadIdentity();
                glOrtho(0.0,EcranLargeur,0.0,EcranHauteur);
     
                /*Tu te mets dans la matrice VIEWMODEL pour afficher tes infos*/
                glMatrixMode(GL_VIEWMODEL);
                glLoadIdentity();
     
                /*Tu affiche tes informations glVertex2D/glBitmap*/
     
     
                /*Et si jamais tu veux afficher encore des trucs sur la scène en glPerspective*/
     
                /*Tu te remets en mode projection ...*/
                glMatrixMode(GL_PROJECTION);
                /*...et tu récupère la matrice perspective telle qu'elle était avant*/
            glPopMatrix();
     
            /*Tu te remet en mode viewmodel ...*/
            glMatrixMode(GL_VIEWMODEL);
            /*...et tu récupère la matrice viewmodel telle qu'elle était avant*/
        glPopMatrix();
     
    }
    Vala le code est pas garanti j'ai pas de compiler sous la main et je fais souvent des étourderis dont GL_VIEWMODEL et GL_MODELVIEW que je ne retiens jamais.
    Pour les questions éventuelles je ne repasse pas avant un moment désolé.

  5. #5
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Ensuite il faudra bien utiliser une fonction pour transformer un vecteur 2D - 3D et vice-versa qui aidera à placer ce qui est ortho vers 3D et inversement.
    Il y a gluProject() et gluUnproject() pour cela.

    edit: Et aussi la dernière façon, si besoin est, que ce sois spécialement un objet 3D mais toujours de même taille: calculer la distance entre la caméra et le dit objet, ensuite appliquer cette distance à l'objet, bien sûr en la divisant pour avoir la bonne taille.
    Utile pour un déplaceur d'objets qui indique les axes, dans un logiciel de modélisation par exemple.
    Toujours avec les mêmes fonctions de transformation 2D – 3D.

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par Happy Voir le message
    Ensuite il faudra bien utiliser une fonction pour transformer un vecteur 2D - 3D et vice-versa qui aidera à placer ce qui est ortho vers 3D et inversement.
    Il y a gluProject() et gluUnproject() pour cela.

    edit: Et aussi la dernière façon, si besoin est, que ce sois spécialement un objet 3D mais toujours de même taille: calculer la distance entre la caméra et le dit objet, ensuite appliquer cette distance à l'objet, bien sûr en la divisant pour avoir la bonne taille.
    Utile pour un déplaceur d'objets qui indique les axes, dans un logiciel de modélisation par exemple.
    Toujours avec les mêmes fonctions de transformation 2D – 3D.
    heu... quand tu est en mode ortho, tu n'a pas besoin de faire des gluProject/UnProject, tout est directement affiché en espace ecran...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Faut pas comprendre de coté, je disais d'utiliser gluProject/UnProject quand on dois afficher un objet ortho à la même position d'un objet 3D, vu que ce dernier changeait de taille suivant la position de la caméra.

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par Happy Voir le message
    Faut pas comprendre de coté, je disais d'utiliser gluProject/UnProject quand on dois afficher un objet ortho à la même position d'un objet 3D, vu que ce dernier changeait de taille suivant la position de la caméra.
    ha oui, vu comme ca, je comprend mieux
    mais comme à priori, il veut que ca croix reste au milieu de l'ecran, ca ne lui servira pas à grand chose
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    non je veux pas qu'elle reste au milieu de l'écran.. je veux que son centre ne change pas de coordonnées dans l'espace et que la croix soit toujours visible à l'écran peut importe ou se trouve la caméra.

  10. #10
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par skalimer0 Voir le message
    non je veux pas qu'elle reste au milieu de l'écran.. je veux que son centre ne change pas de coordonnées dans l'espace et que la croix soit toujours visible à l'écran peut importe ou se trouve la caméra.
    heu... y'a pas comme une incompatibilité dans les prérequis ? si la croix ne change pas de position dans l'espace et que la camera se retourne, la croix sortira forcement du frustum...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    oui bien sur... j'aurais du préciser.. du moment qu'elle reste dans le champ de vision de la caméra... alors je cherche a ce que l'on voit la croix (et pas un trait si on la regarde de cote)...

  12. #12
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    si, j'ai bien compris, tu veux avoir une croix en position (x,y,z) (en coordone du monde 3d) que l'on peut voir tout le temps, quelque soit la rotation ou translation effectue sur le system...?? Comme si la croix etait dessiner en 2d mais en suivant les mouvements 3d de la scene.

    si, c'est ca, voici un bout de code qui fait exactement ca:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
      glPushMatrix();    
     
     
         // rotation de la camera - anglex et angley correspondant au mouvement de la souris
         glRotatef(-anglex,0.0,1.0,0.0);
         glRotatef(-angley,1.0,0.0,0.0);
     
         ...dessine la scene normalement
     
      glPopMatrix();
     
     
      glPushMatrix();
     
         // deplace la croix vers l'avant de facon qu'elle soit toujours
         // place devant tous les autres objects de la scene  
         glTranslatef(0,0,1);      
     
     
         // rotation de la camera - anglex et angley correspondant au mouvement de la souris
         glRotatef(-anglex,0.0,1.0,0.0);
         glRotatef(-angley,1.0,0.0,0.0); 
     
         glPushMatrix();
     
            //deplace la croix a son emplancement 3d (x,y,z)
            glTranslatef(x,y,z); 
     
            // rotation inverse a celle de la camera
            glRotatef(anglex,0.0,1.0,0.0);
            glRotatef(angley,1.0,0.0,0.0);
     
            // dessine la croix avec glBegin(GL_LINES) par example 
            dessine_croix();	 
     
         glPopMatrix();
     
     
      glPopMatrix();

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Par défaut
    ouais.. je vais regarder comment détourner ça... car je fait aucune translation ni rotation dans mon monde 3D je n'utilise que gluLookAt en déplacant la caméra et le point de référence a des endroit précis.

  14. #14
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 577
    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 577
    Par défaut
    je crois comprendre que tu veux une croix plane toujours visible de face
    et en plus tu veux qu'elle fasse la même taille à l'écran qu'elle soit proche ou loin de la caméra ?

    pour qu'elle soit toujours visible de face, regardes du côté des billboard
    pour qu'elle ne change pas de taille, il te suffit de ne pas prendre en compte la distance
    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. [Turbo Pascal] Afficher une sphère dans l'espace
    Par bazore dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 27/03/2010, 13h58
  2. Limiter une surface dans l'espace
    Par azertyuio dans le forum Mathématiques
    Réponses: 0
    Dernier message: 01/03/2010, 18h50
  3. [XL-2003] insérer une croix dans un nombre aléatoire de cases
    Par macgivre67 dans le forum Excel
    Réponses: 1
    Dernier message: 28/09/2009, 19h54
  4. Tracer une fonction dans un espace R3
    Par Giansolo dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/10/2008, 10h32
  5. [OpenSceneGraph] Position d'une caméra dans l'espace
    Par Invité(e) dans le forum OpenSceneGraph
    Réponses: 2
    Dernier message: 28/08/2008, 10h58

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