IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Rotation et origine


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 145
    Par défaut Rotation et origine
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
                    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 ???

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il faut translater ton personnage en 0, effectuer la rotation, puis le remettre là où il était. En général on construit donc une fois pour toute la matrice correspondante à tout ça et on l'applique au moment du rendu.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 145
    Par défaut
    Ok, mais comment on fait justement pour construire cette matrice ???

    Parce qu'en fait là, ça fait une rotation autour de 0 mais si mon perso est en 400, je te dis pas la galère ...

    Merci pour ton aide !

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Un petit cours sur les matrices pour savoir comment construire les matrices de rotation / translation / scaling, puis tu multiplies tout ce beau monde et hop, t'as ta matrice de transformation .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 145
    Par défaut
    Ok merci pour ton lien!
    C'est un peu compliqué mais bon ...

    Par contre je comprends pas : je fais glPushMatrix(); ça devrait pas mettre les coordonnées du centre de l'objet en origine ???

    Parce que je fais ça à un autre endroit et ça marche nickel ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 145
    Par défaut
    En fait je vais faire plus simple :

    Je met mon objets en 0.

    Je fait translate vers sa position.
    Je fait rotate.

    Et ça marche, ça tourne par rapport à son centre !

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est un peu compliqué mais bon ...
    Ce sont les bases de la programmation 3D, tant que tu ne maîtriseras pas les matrices et autres outils mathématiques tu bloqueras sur ce genre de problèmes

    je fais glPushMatrix(); ça devrait pas mettre les coordonnées du centre de l'objet en origine ???
    glPushMatrix ne fait qu'empiler l'une des matrices courantes, ça ne modifie rien au niveau des transformations.

    Je met mon objets en 0.

    Je fait translate vers sa position.
    Je fait rotate.

    Et ça marche, ça tourne par rapport à son centre !
    La rotation ne serait pas plutôt entre les deux translations : Parce que si tu fais tourner ton personnage alors qu'il n'est pas centré en zéro, tu retombes sur ton problème initial.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 145
    Par défaut
    En fait je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    glPushMatrix();	
     
    	glTranslatef(X,0,Z);
    	glRotatef(angle2,0.f,1.f,0.f);
     
    	glBegin(GL_QUADS);	
    	glTexCoord2i(0, 1);	glVertex3f(-10, 1,0);
    	glTexCoord2i(0, 0);	glVertex3f(-10, 8,0);
    	glTexCoord2i(1, 0);	glVertex3f(10, 8,0);
    	glTexCoord2i(1, 1);	glVertex3f(10, 1,0);
    	glEnd();
     
    	glPopMatrix();

Discussions similaires

  1. Problème de rotation
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 16h38
  2. Rotation de Bitmap -> ScanLine
    Par jujuesteban dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2003, 15h11
  3. Rotation d'un bouton ?
    Par ken_survivant dans le forum Composants
    Réponses: 3
    Dernier message: 01/04/2003, 18h16
  4. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59
  5. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo