é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:
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:
w_width = w_height = 600
Donc d'après un calcul simple, je pense pouvoir écrire :
Code:
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 ?