Rotation et origine

Signaler
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008
-
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
Salut,

Salut,
Je veut faire une fonction réseau sur mon jeu, donc il faut que je représente les persos ennemies.

Pour cela, je prends les coordonnés et jusque là tout va bien.
Mais il faut aussi je tienne compte de leur direction de vision, et pour celà je fait comme ça :

double aX=g_Camera.m_vView.x-g_Camera.m_vPosition.x; 
   double aZ=g_Camera.m_vView.z-g_Camera.m_vPosition.z; 
   double angle = atan(aZ/aX); 
   int angle2=(180*angle)/PI; 
    
   glPushMatrix(); 
   glRotatef(angle2,0,1,0); 

   Z=strtol(ClientZ,NULL,0); 
   X=strtol(ClientX,NULL,0); 

//je fais un test avec un carré pour l'instant 
   glBegin(GL_QUADS);    
   glTexCoord2i(0, 1);   glVertex3f(X-10, 1,Z); 
   glTexCoord2i(0, 0);   glVertex3f(X-10, 8,Z); 
   glTexCoord2i(1, 0);   glVertex3f(X+10, 8,Z); 
   glTexCoord2i(1, 1);   glVertex3f(X+10, 1,Z); 
   glEnd(); 
    
   glPopMatrix(); 


Donc voila, ça marche bien, mais le problème c'est que la rotation se fait par rapport à l'origine du repère(donc ici 0) mais si mon perso ennemie est pas en 0, ça ne va plus du tout !!!

Comment faire pour changer les origines du repères SVP ???

10 réponses

Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
une fonction réseau!!!!
nan mais goutbouyo faut pas avoir les yeux plus gros que la tete si j'ose dire.

bon dee toute facon pour les rotations, il faut d'abord que tu translates ton perso en 0,0,0, puis que tu fasses ta rotation, puis que tu le refoutes a sa pos d'origine.

je ne comprend pas bien ce que ton code fait, ni le sens général de tout ce qui ce trouve avant le bout de code.

ou alors, si j'ai bien compris, ce n'est pas sur, mets ton rotate apres le translate.
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

LOL !!!
Je fais juste une petite fonction pour réseau local ...
Je compte pas faire un counter strike !!!

En fait c'est bon j'ai réussi, en effet il fallait le replacer en 0 avant de faire la rotation.

Pour l'instant le réseau marche pas mal sauf que j'ai un décalage d'une seconde entre les 2 ordis ...
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ha oui ca c'est embetant ;)

mais qd meme ton trtuc m'embete.
Tu devrais faire ca:
glRotatef(perso.angle,0,1,0);
pour choisir sa direction;
glTranslatef(perso.pos.x,perso.pos.y,perso.pos.z);
pour sa position
et puis dessiner le perso en (0,0,0).
sinon tu vas pas t'en sortir, peut etrre que ca parche avec uun carré mais avec un md2 tu va galérer je pense.
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Oui t'as raison.
Mais en fait depusi j'ai fait des modifs et ça donne ça :

glTranslatef(X,10,Z);
glRotatef(anglef,0,1,0);

Pour l'instant je gère qu'un perso ennemie donc ça va ...
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Au fait, maintenant y a plus de décalage, et j'ai mis un MD2.
Pas de problème, mais va falloir que je gère les animations maintenant ...
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
mais ca n'était pas déja fait tout ca?
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Qu'est ce qui était déjà fais ???

T'aurais pas une idée pour les animations de MD2 ???

En fait si le perso ennemi bouge je le fais courrir et s'il bouge pas je le rend immobile.

J'ai essayer d'enregistrer à chaque affichage la valeur X et Z du l'ennemie dans XOld et ZOld, ensuite si XOld=X alors ça veut idre qu'il bouge pas, donc je met l'anim immobile.

Le problème c'est que ça marche pas ...
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
Aie!
"si XOld=X alors ça veut idre qu'il bouge pas, donc je met l'anim immobile."
ben non!
tes persos décrivent un carré, donc sur 2 des 4 cotés il Xold==X. il faut faire if(Xold!=X || Yold!=Y) Moveperso();
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

EN fait j'ai réussi.
Mais comme j'envois les donnée sur le réseau, et que je les envoie pas à chaque frame il fallait mettre un petit écart pour que ça marche.
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ohoh! une petite interpolation linéaire hein? a quand l'interpolation quadratique? :D