Bonjour tout le monde,
j'essaye de faire un petit programme (c++ et opengl) de visualisation de scene, dans laquelle je dois être capable de se balader en utilisant les touches tu clavier.
voici une portion du code :
Malheureusement le résultat n'est pas vraiment satisfaisant, et je crois que le problème se produit lors de la récupération des coordonnées cartésiennes à partir des coordonnées sphérique :
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
44
45
46
47
48
49
50
51
52
53
54
55
56 rad = 0.0174532925f (PI/180); GLvoid display() { glLoadIdentity(); GLfloat xtrans = -xpos; GLfloat ztrans = -zpos; GLfloat ytrans = -ypos; GLfloat SceneRot = 360.0f - LookLeftRight; glRotatef(lookupdown,1,0,0); glRotatef(SceneRot,0,1,0); glTranslatef(xtrans, ytrans, ztrans); drawscene() } GLvoid clavier(int key, int x, int y) { switch (key) { case GLUT_KEY_UP: xpos -=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad); ypos -= (float)sin(lookupdown*rad)*sin(LookLeftRight*rad); zpos -= (float)cos(lookupdown*rad); glutPostRedisplay(); break; case GLUT_KEY_DOWN: xpos +=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad); ypos += (float)sin(lookupdown*rad)*sin(LookLeftRight*rad); zpos += (float)cos(lookupdown*rad); glutPostRedisplay(); break; case GLUT_KEY_LEFT: LookLeftRight -= 1.0f; glutPostRedisplay(); break; case GLUT_KEY_RIGHT: LookLeftRight += 1.0f; glutPostRedisplay(); break; case 'y': lookupdown-= 1.0f; glutPostRedisplay(); break; case 'Y': lookupdown+= 1.0f; glutPostRedisplay(); break; } }
J'espère que j'ai bien expliqué mon problème. si quelqu'un pourra m'aidé je serai très reconnaissante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 xpos -=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad); ypos -= (float)sin(lookupdown*rad)*sin(LookLeftRight*rad); zpos -= (float)cos(lookupdown*rad);
Merci d'avance
Partager