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 :

Transformation => Rotation


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par défaut Transformation => Rotation
    Salut,
    J'ai un petit soucis (je pense que c'est de l'ordre mathématiques), voila, je suis en train de créer un "perso " et actuellement je suis sur les bras. J'ai crée les jointures de l'épaules et du coude (avec des spheres) et je les ai reliés par des spheres que j'ai aplati. Cela me convient bien, mais maintenant j'essais de les faire bouger. Alors le soucis c'est que quand j'applique la transfo de rotation le bras ne "rotate" pas par rapport à une jointure (normal quoi). Or moi j'aimerais effectuer la rotation par rapport à la jointure. Est-ce assez clair ? lol
    Comment faire ??

    Voila un bout de code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    void BrasD() // Fonction du bras droit
    {
    	glTranslatef(1.3,0,8.5);
    	GLUquadric* params = gluNewQuadric(); //création du quadrique
     
    	glPushMatrix();
     
    	glScalef (0.5f, 0.5f, 0.5f);
    	glColor4f(1,0.5,0,1.0);	
    	glTranslatef(-1.3,0,-13.5);
    	gluSphere(params,0.5f,100,100);	 //Jointure haute droite
     
    	glPopMatrix() ;
     
    	//////////////////////////      
     
    	glRotatef(Xrot,1,0,0); // permet la rotation du bras lors de l'appui d'une                touche
     
    	glColor4f(1,0,0,1.0);	
     
    	glPushMatrix();
     
            glRotatef(90,0,1,0);
    	glScalef (1.5f, 0.1f, 0.1f);
    	glTranslatef(3.8,0 ,-4.7);       //bras droit
    	gluSphere(params,0.7f,100,100);	 
     
    	glPopMatrix() ;
     
    }

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    - il faut tout d'abord faire une translation : translation ayant pour valeur le vecteur formé par le centre de rotation actuel et celui que tu désire (l'épaule).
    - ensuite tu fais ta rotation
    - puis tu fais la translation inverse...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 594
    Par défaut
    tu doit déplacer ton élément pour que le point de rotation soit à l'origine au moment de la rotation
    les rotations s'effectuent toujours par rapport au repère global et on objet a un repère local
    si le point de rotation est en {10, 5, 0} et que tu veux faire une rotation de 20° sur x il faut que tu fasses :
    une translation {-10, -5, 0} pour ramener le repère local au repère global
    la rotation {20, 1, 0, 0} de l'élément
    une translation {10, 5, 0} pour replacer l'objet à son repère d'origine
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par défaut
    ok, mais comment je peux recuperer les coordonnées de mon centre de rotation ? (c est une question stupide ça )

  5. #5
    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
    Et bien a priori tu les connais ces coordonnées, c'est là où tu as placé la jointure autour de laquelle tu veux faire tourner ton bras.

  6. #6
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 594
    Par défaut
    c'est un peu la base d'une animation par squelette
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par défaut
    Ok, alors voila ce que j'ai fait :
    J'ai trouvé en cherchant mais je comprends pas comment ça peut marcher ... Et moi j'aime bien comprendre ce que je fais


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    void BrasD()
    {
    	glTranslatef(1.3,0,8.5);
    	GLUquadric* params = gluNewQuadric(); //création du quadrique
     
    	glPushMatrix();
     
            glScalef (0.5f, 0.5f, 0.5f);
            glColor4f(1,0.5,0,1.0);	
     
    	glTranslatef(-1.3,0,-13.5);
    	gluSphere(params,0.5f,100,100);	 //Jointure haute droite
     
    	glPopMatrix() ;
     
    	//////////////////////////      
     
    	glTranslatef(-0.5,0 ,-6.7);
    	glRotatef(Xrot,1,0,0);
    	glRotatef(Yrot,0,1,0);
    	glTranslatef(0,0 ,1);
     
    	glColor4f(1,0,0,1.0);	
     
    	glPushMatrix();
     
    	glRotatef(90,0,1,0);
    	glScalef (1.5f, 0.1f, 0.1f);
    	gluSphere(params,0.7f,100,100);	 
     
    	glPopMatrix() ;
    Voila alors au debut je place proche de ma vue toute la scéne, je dessine ma jointure de l'épaule et je la place plus précisement,
    ensuite je fais les opérations pour les rotations du bras sur l'epaule. En faite c 'est la ligne suivante que je ne comprends pas trop : glTranslatef(0,0 ,1); si je met ça, la rotation de mon objet se fait sur le point de mon objet que je "rotate" , je sais pas si vous voyez, enfin cela marche niquel avec cette ligne mais je capte pas vraiment pourquoi. Si par exemple j'ai pas le 0 sur l'axe x , genre : glTranslatef(x,0 ,1); et bien ma rotation sur Y ne va plus marcher.

    Bref, j'ecris du code, j'ai compris la façon de faire mathematiquement, mais niveau code c'est pas trop ça. (Ca marche, mais je sais pas comment )

    EDIT: En faite nan j'ai compris, cela permet de ramener mon objet sur l 'origine , je fais mes rotations puis je le deplace ou je souhaite le voir. Donc c'est bien ce qu'il faut faire . C'est niquel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tutoriels OpenGL ogldev en français : les transformation : la rotation
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 15/06/2014, 13h35
  2. Réponses: 1
    Dernier message: 18/11/2011, 11h43
  3. Rotate Transform animation
    Par distil dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 09/08/2011, 10h37
  4. Réponses: 2
    Dernier message: 27/05/2010, 17h41
  5. Réponses: 7
    Dernier message: 07/08/2009, 12h29

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