Utiliser Rotated et Translated en OpenGL

Signaler
Messages postés
5
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
20 décembre 2004
-
Messages postés
79
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
11 mai 2007
-
Bonjour,

Je suis en train d'essayé de faire un laby en OpenGL. Malheureusement, je ne reussi pas a faire des rotations et des translation en meme temps. Si je fait les translation en premier, le perso avance toujours dans la meme direction (normal, aucune rotation). Si je fait l'inverse, la rotation se fait a partir du centre donc n'importe comment.

Merci d'avance

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bon je te balance directement ma ligne de code:
Un gros conseil, utilises:

gluLookAt(position_camera_x, position_camera_y, position_camera_z,
point_x, point_y, point_z,
vecteur_normal_x, vecteur_normal_y, vecteur_normal_z);

- avec point, le point correspondant à ce que tu regardes. En gros, le centre de l'écran passe par ce point.

- avec vecteur_normal, le vecteur normal a la direction de la camera.

Ca évite de se faire ... avec les transformations du aux déplacements, quite à les comprendre plus tard.
Messages postés
79
Date d'inscription
dimanche 1 juin 2003
Statut
Membre
Dernière intervention
11 mai 2007

Je sais pas si la réponse de luthor t'as satisfait, mais même si c'est le cas je vais répondre aussi pour d'autre qui travaille comme en allegrogl, moi aussi je fais un laby et pour me la rotation et translation j'ai fait :

void set_camera_position (void)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.0, 1000.0);

glRotatef (camera.xangle, 1, 0, 0);
glRotatef (camera.yangle, 0, 1, 0);
glRotatef (camera.zangle, 0, 0, 1);
glTranslatef (camera.distx, camera.disty, camera.distz);

glMatrixMode (GL_MODELVIEW);
}

et pour mes déplacement j'ai :

if (key[KEY_UP] ||key[KEY_W])
{
camera.distz = camera.distz + cosf(D2R(-camera.yangle))*dist_speed;
camera.distx = camera.distx + sinf(D2R(-camera.yangle))*dist_speed;

}

if (key[KEY_DOWN] ||key[KEY_S])
{
camera.distz = camera.distz - cosf(D2R(-camera.yangle))*dist_speed;
camera.distx = camera.distx - sinf(D2R(-camera.yangle))*dist_speed;

}
if (key[KEY_A])
{
camera.distz = camera.distz + cosf(D2R(90-camera.yangle))*dist_speed;
camera.distx = camera.distx + sinf(D2R(90-camera.yangle))*dist_speed;
}

if (key[KEY_D])
{
camera.distz = camera.distz - cosf(D2R(90-camera.yangle))*dist_speed;
camera.distx = camera.distx - sinf(D2R(90-camera.yangle))*dist_speed;
}

Bon je mets pas tout, moi j'ai la possibilité de me baisser et me relever, mais je pense aps que se soit très utile...
Bon même si ça va pas trop t'aider car je pense pas que tu sois en allegroGL, ça pourra en aider d'autre...

Bye
SULLYPER