Utiliser Rotated et Translated en OpenGL

Qapoka Messages postés 5 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 20 décembre 2004 - 20 déc. 2004 à 17:24
sullyper Messages postés 79 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 11 mai 2007 - 22 déc. 2004 à 15:04
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 déc. 2004 à 21:42
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.
0
sullyper Messages postés 79 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 11 mai 2007
22 déc. 2004 à 15:04
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
0
Rejoignez-nous