visualisation d'une scene avec opengl
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 :
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 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;
}
} |
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:
1 2 3
| xpos -=(float)sin(lookupdown*rad)*cos(LookLeftRight*rad);
ypos -= (float)sin(lookupdown*rad)*sin(LookLeftRight*rad);
zpos -= (float)cos(lookupdown*rad); |
J'espère que j'ai bien expliqué mon problème. si quelqu'un pourra m'aidé je serai très reconnaissante
Merci d'avance