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 :
Mon widget a les dimensions suivantes :
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); }Donc d'après un calcul simple, je pense pouvoir écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part w_width = w_height = 600
avec distance = 3 et zoom_out = 100/3
Code : Sélectionner tout - Visualiser dans une fenêtre à part width/2 = height/2 = tan(45) * distance * zoom_out = 3*100/3 = 100
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 ?
Partager