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

XNA/Monogame Discussion :

Point de rotation Objet3D


Sujet :

XNA/Monogame

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut Point de rotation Objet3D
    Bonjour,

    La rotation de mon objet 3D (un cube) ne se fait pas comme je le voudrais.Je souhaite une rotation du cube sur lui-même,comme l'axe d'une roue de vélo.Mais mon cube a son axe sur l'extérieur (le pneu de la roue).Donc je présume que la rotation s'effectue par rapport au pivot de l'objet.Alors je me suis dis qu'il suffit de retourner sous MAX et de modifier le pivot pour le mettre au centre.Mais c'est mettre la tête dans le sable car imaginons que je veuille modifier l'axe de rotation (un coin du cube par exemple)à la "volée", je ne saurais toujours pas le faire.Donc ma question est celle-ci: Comment modifier le point pivot d'origine d'un objet3D (un vertex quelconque) pour modifier sa rotation sans retourner dans le logiciel 3D ?
    Merci.

    EDIT: Effectivement , si je retourne sous MAX et que je centre le pivot , la rotation s'effectue comme je le souhaite.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je ne suis pas complètement sur de ce que vous voulez faire, mais ceci pourra peut être vous aider:
    http://jeux.developpez.com/faq/math/...formations#Q38
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    LittleWhite,

    Merci, je vais voir si ça m'aide.
    Là où je veux en venir c'est à la même chose que sur ce post:
    http://forums.create.msdn.com/forums/t/36355.aspx

    J'ai essayé la méthode du dernier post (xPox) mais pour l'instant ça ne donne rien de concluant.Je précise que je fais ma rotation avec un quaternion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Update
     Quaternion Rot = Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), RotGaucheDroite);  
                Rotation*=Rot;
    //Et bien sûr le SRT dans Draw
    Matrix world = Matrix.CreateScale(Scale) * Matrix.CreateFromQuaternion(Rotation) * Matrix.CreateTranslation(Position);
    Je vais tester.

    Salutations.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Bonjour,

    Le code donné en exemple (dernier post) par xPox ici (http://forums.create.msdn.com/forums/t/36355.aspx) fonctionne parfaitement.
    Mon cube faisant 0.05f de longueur (10 cm dans MAX) et mon pivot se trouvant au centre absolue du cube , voilà le code pour déplacer le point de rotation à sa base et avoir une rotation du cube entier autour de sa base (comme un gymnaste à la barre fixe) au lieu de l'avoir en son centre (comme un bonhomme du baby-foot):
    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
     
    /*variables globales
    Matrix world = Matrix.Identity;
    Matrix RotationMatrix = Matrix.Identity;
    Vector3 Scale = Vector3.One;
    Vector3 FinalPoint;
    float degreesRotation = 0.0f;
    */
    //Update
    degreesRotation += 0.03f;
    //Center =la position actuelle de mon cube
    Vector3 Center = new Vector3(0, 0, 0);
    //je déplace le point de rotation à sa base (moitié de 0.05 sur Y)
    Vector3 RotationPoint = new Vector3(0, 0.025f, 0);
    Vector3 AdjustedPoint = Center - RotationPoint;
    RotationMatrix = Matrix.CreateRotationX(degreesRotation);
    AdjustedPoint = Vector3.Transform(AdjustedPoint, RotationMatrix);
    FinalPoint = AdjustedPoint + RotationPoint;
    //Draw
    world = Matrix.CreateScale(Scale);
    world *= RotationMatrix * Matrix.CreateTranslation(FinalPoint);
    Merci donc à xPox pour ce code.
    De mon côté il me reste à transposer ce code en quaternion.

    Salutations.

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

Discussions similaires

  1. Calculer les coordonnées d'un point en rotation elliptique
    Par MisterG dans le forum Mathématiques
    Réponses: 4
    Dernier message: 03/01/2013, 14h19
  2. Point de rotation d'un object
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/02/2008, 15h48
  3. Point de Rotation
    Par Clément76 dans le forum SDL
    Réponses: 1
    Dernier message: 10/08/2006, 20h43
  4. [VB6]definir un point de rotation
    Par liquidnitrogen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 06/04/2006, 20h43
  5. rotation par rapport à un point
    Par marcololo dans le forum DirectX
    Réponses: 8
    Dernier message: 03/06/2005, 15h36

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