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 :

échelle - calcul bonne valeur initiale - scène 3D


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 60
    Par défaut échelle - calcul bonne valeur initiale - scène 3D
    Bonjour,

    j'ai développé une petite application qui permet de modéliser la dynamique d'un disque stellaire. Le rendu est en 3D (avec des fonctionnalités de rotation et de zoom). Voici une image au début de l'animation :


    Vous pouvez voir en haut de l'image les différentes statistiques. Mon problème concerne la valeur initiale de l'échelle (100 kpc). En effet, j'utilise pour l'initialisation une projection en perspective de la manière suivante :

    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
      if (isDisplayFirst)
      {
        isDisplayFirst = false;
    
        // Initialize View
        glViewport(0, 0, w_width, w_height);
    
        glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
        glLoadIdentity(); // Reset The Projection Matrix
    
        glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
        glLoadIdentity(); // Reset The Modelview Matrix
    
        /* perspective */
        gluPerspective(45.0f, (float)w_width / w_height, g_nearPlane, g_farPlane); 
        /* distance z = 3 */
        gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
       /* zoom out = 100/3 */
        glScalef(0.03f, 0.03f, 0.03f);
    }
    Mon widget a les dimensions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w_width = w_height = 600
    Donc d'après un calcul simple, je pense pouvoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    width/2 = height/2 = tan(45) * distance * zoom_out = 3*100/3 = 100
    avec distance = 3 et zoom_out = 100/3

    Pour pouvoir afficher le HUD (head up display), j'utilise une projection orthognale et j'ai tracé une ligne de 100 pixels. Mais lorsque je la compare avec la valeur moyenne des positions de chaque particule, je m'aperçois que cette valeur initiale de 100 est un peu trop grande.

    Il y a vraisemblablement une erreur dans le calcul de cette valeur initiale pour la ligne d'échelle. Les unités utilisées dans le programme sont des kpc et je fais le lien entre :
    1 pixel = 1 kpc

    Je veux juste avoir une valeur qui donne une échelle de distance dans le plan (Oxy).

    Pourriez-vous me dire si le calcul précédent est correct, et si non, quelles pistes vous auriez pour m'aider ?

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par défaut
    Salut,

    Je pense que tu t'es mélangé entre les matrices modelview et projection. La projection ne doit représenter que la "lentille" de ta caméra, avec un ratio et un angle d'ouverture. En gros ce que fait gluPerspective. Tout ce qui touche au positionnement de la caméra (gluLookAt par ex., ou les translation/rotation) doit être appliqué à la modelview.

    A noter aussi que c'est généralement une très mauvaise idée de toucher une matrice de projection perspective avec un scale, translation ou autre à moins de savoir exactement ce que l'ont fait. Mathématiquement ça marche, y'a pas de soucis, mais ça fait rarement ce qu'on pense intuitivement. Je n'ai pas le temps de faire les calcul mais c'est ce qu'il doit se passer dans ton cas. Donc en gros, to code devrait ressembler à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
    glLoadIdentity(); // Reset The Projection Matrix
     
     /* perspective */
    gluPerspective(45.0f, (float)w_width / w_height, g_nearPlane, g_farPlane); 
     
    glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
    glLoadIdentity(); // Reset The Modelview Matrix
     
    /* distance z = 3 */
    gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    /* zoom out = 100/3 */
    glScalef(0.03f, 0.03f, 0.03f);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 60
    Par défaut
    merci pour cette remarque.

    voici l'image en question au début de mon premier post :



    en haut à droite la barre d'échelle qui fait 100 pixels et dont je cherche une valeur qui donne une idée sur la valeur en kilo parsec des particules dans le plan Oxy.

Discussions similaires

  1. [PHP 5.4] Calculer les bonnes valeurs qui se trouvent dans un array ?
    Par tonton.odilon dans le forum Langage
    Réponses: 3
    Dernier message: 25/05/2015, 20h51
  2. [lsqcurvefit] Comment calculer les bonnes valeurs ?
    Par DOC doc doc dans le forum MATLAB
    Réponses: 0
    Dernier message: 13/05/2008, 10h59
  3. Calcul de valeurs propres
    Par Andrey dans le forum Pascal
    Réponses: 6
    Dernier message: 11/02/2007, 23h20
  4. [Debutant]calcul de valeurs propres, givens-householder
    Par malbarre dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 18/08/2005, 16h40
  5. Rnd qui ne donne pas que des bonnes valeurs
    Par kubito dans le forum Access
    Réponses: 2
    Dernier message: 08/10/2004, 18h00

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