Rotation d'une partie d'un modèle
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 :
Code:
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); |
cela fonctionne parfaitement ( y compris les rotations qui permettent de gérer l'attitude de l'hélico)
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:
Code:
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 (); |
Le principe fonctionne mais j'ai un problème de centre de rotation
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 :lol:
Comment faire ?
Merci d'avance de votre aide
Philippe