Glut (Moteur 3D) : Pb de déplacements

billwatterson Messages postés 3 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 24 janvier 2005 - 23 janv. 2005 à 16:19
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 - 25 janv. 2005 à 22:35
Bonjour,

* Je réalise actuellement un labyrinthe en 3D sous Glut dans lequel on doit se déplacer.
J'ai eu beau regarder les différentes sources sur ce sujet, je n'ai toujours pas compris le principe des déplacements.

* Les déplacements sont : soit j'avance/recule soit je tourne soit les deux.

* Pour cela j'utilise la fonction gluLookAt en sachant que la hauteur (axe Z) ne varie pas
(z = 0.5).
d'où : gluLookAt(posCamX,posCamY,0.5,ptVueX,ptVueY,0.5,0,0,1.0);

* pour avancer :
pas=0.05;
posCamX = posCamX + pas*(ptVueX-posCamX);
posCamY = posCamY + pas*(ptVueY-posCamY);
ptVueX = ptVueX + pas*(ptVueX-posCamX);ptVueY ptVueY + pas*(ptVueY-posCamY); > équivaut à une translation de la position et du point de vue en gardant la même distance entre les 2 points

* pour reculer : idem avec - au lieu du +

* pour tourner :

angle=PI/50;
ptVueX = posCamX + (ptVueX-posCamX)*cos(angle) - (ptVueY-posCamY)*sin(angle);ptVueY posCamY + (ptVueX-posCamX)*sin(angle) + (ptVueY-posCamY)*cos(angle);> équivaut à une rotation de centre posCam

En avançant/reculant, ça marche mais au bout d'un moment, c'est comme si le pas de déplacement diminuait...(peu importe sa valeur)

Et pour la rotation, ça marche un peu comme ça veut...

Je sais que tout ça c'est des maths mais les maths et moi ça fait 4...
Si vous avez ne serait-ce qu'une ombre d'explication n'hésitez pas!!

Merci d'avance!!

3 réponses

Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 janv. 2005 à 20:53
Bon je viens de te faire un mini-prog d'exemple avec GLUT téléchargeable ici :

http://funto.hollosite.com/main.cpp

http://funto.hollosite.com/Deplacements.exe



Le principe est simple (du moment que tu te fais un petit dessin et que
tu connais le cercle trigonométrique ;)) : ça se résume en ces quelques
lignes :



gluLookAt(pos_x, 2.0, pos_z,

pos_x + cos(angle), 1.50, pos_z + sin(angle),

0.0, 1.0, 0.0);



switch(key)

{

case GLUT_KEY_UP:

pos_x += cos(angle)*0.1;

pos_z += sin(angle)*0.1;

break;

case GLUT_KEY_DOWN:

pos_x -= cos(angle)*0.1;

pos_z -= sin(angle)*0.1;

break;

case GLUT_KEY_LEFT:

angle -= 0.2;

break;

case GLUT_KEY_RIGHT:

angle += 0.2;

break;

}


Déjà une première précision, j'utilise l'axe Y comme pointant vers le
haut, donc tout se fait selon le plan (x, z). le point (pos_x, pos_z)
correspond à la position de la caméra, la variable angle à l'angle de
rotation de la caméra.

Lors d'un appui sur la touche fléche avant/arrière, on translate le
point (pos_x, pos_z) selon un vecteur égal à 0.1*(cos(angle),
sin(angle)), autrement dit selon un vecteur avec une norme petite et
qui est colinéaire au vecteur qui va de la position de la caméra au
point visé par la caméra.

Celui-ci se trouve logiquement en (pos_x + cos(angle), pos_z + sin(angle)) (fais un dessin si tu ne vois pas pourquoi).



J'espère avoir été clair ;)


---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
0
billwatterson Messages postés 3 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 24 janvier 2005
23 janv. 2005 à 22:07
C'est parfait, ça marche nickel !!

Un grand merci à Funto66

Mais autant compliquer la tâche :

Comment faire pour avancer et tourner en même temps ??
Comment faire pour tourner avec la souris ??

Merci d'avance !!
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
25 janv. 2005 à 22:35
Pour avancer et tourner en même temps, avec le clavier, ben il faudrait
que tu puisses répondre à tous les évènements qd ils se produisent...

Bref je ne sais pas si c'est possible avec GLUT :(



Pour ce qui est de la souris, faut que tu fasses le déplacement en
fonction d'une différence entre un point d'origine O où se trouve la
souris et sa position actuelle...

Bref, essaie un peu par toi-même ;)

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
0
Rejoignez-nous