Bonjour,
je débute en OpenGL (avec les MFC) et c'est ma 1ère intervention parmi vous.
voici mon problème:
j'affiche un hélicoptère, constitué de 5443 triangles :
en gros, mon code est :
cela fonctionne parfaitement ( y compris les rotations qui permettent de gérer l'attitude de l'hélico)
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 glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (40.0, // Field-of-view angle aspect, // Aspect ratio of viewing volume 1.0, // Distance to near clipping plane 10.0); // Distance to far clipping plane glViewport (0, 0, width, height); // // Clear the color and depth buffers. // glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // // Define the modelview transformation. // glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glTranslatef (0.0f, 0.0f, -8.0f); glRotatef (-90.0f-assiette, 1.0f, 0.0f, 0.0f); glRotatef (-inclinaison, 0.0f, 1.0f, 0.0f); glRotatef (-cap, 0.0f, 0.0f, 1.0f); glScalef (5.5f,5.5f,5.5f); glBegin (GL_TRIANGLES); int imax=sizeof(face_indicies)/sizeof(face_indicies[0])-1; for(int i=0;i<=imax;i++) { for(int j=0;j<3;j++) { int vi=face_indicies[i][j]; int ni=face_indicies[i][j+3]; int ti=face_indicies[i][j+6]; glNormal3f (normals[ni][0],normals[ni][1],normals[ni][2]); glTexCoord2f(textures[ti][0],textures[ti][1]); glVertex3f (vertices[vi][0],vertices[vi][1],vertices[vi][2]); } //for j } //for i glEnd (); // // Swap the buffers. // glFlush(); SwapBuffers(dc.m_ps.hdc);
maintenant, je veux animer le rotor :
j'ai isolé les triangles représentant le rotor mettons entre index1 et index2
donc je représente mon hélico sans rotor avec le code précédent (en interdisant l'affichage si index1<=i<=index2)
et ensuite, je fais:
Le principe fonctionne mais j'ai un problème de centre de rotation
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 glRotatef (angle de rotation du rotor, 0.0f, 0.0f, 1.0f); glBegin (GL_TRIANGLES); for( i=index1;i<=index2;i++) { for(int j=0;j<3;j++) { int vi=face_indicies[i][j]; int ni=face_indicies[i][j+3]; int ti=face_indicies[i][j+6]; glNormal3f (normals[ni][0],normals[ni][1],normals[ni][2]); glTexCoord2f(textures[ti][0],textures[ti][1]); glVertex3f (vertices[vi][0],vertices[vi][1],vertices[vi][2]); } //for j } //for i glEnd ();
alors que dans le 1er code, le rotor est bien centré où il faut,
dès que je le fais tourner, le centre de rotation "précessionne", comme l'axe d'une toupie :
pour être plus clair, le rotor tourne bien, mais son centre tourne autour du point d'ancrage idéal du rotor.
j'espère être clair![]()
Comment faire ?
Merci d'avance de votre aide
Philippe
Partager