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 :

XNA 4 Rotation cube 360


Sujet :

XNA/Monogame

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut XNA 4 Rotation cube 360
    Bonjour,

    J'aimerais savoir si quelqu'un peut m'expliquer avec quoi et comment faire une caméra qui regarde sur 360 degré et qui reste à une certaine distance.

    Car je bloque au niveau de la rotation verticale à cause de l'axe x et z.

    Je voulais créer un axe provisoire entre l'axe x et z et perpendiculaire à l'axe de la caméra (direction) mais je sais pas si c'est une bonne solution.

    Merci.

  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,

    A une certaine distance de quoi ?
    Voulez-vous une caméra satellitaire (qui tourne autour d'un objet, toujours à la même distance) ?
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Oui voilà une caméra qui tourne autour d'un point.

    J'arrive à la faire tourner autour de l'axe Y ( horizontale ça va c'était pas trop dur..) mais pour la rotation verticale je vois pas comment faire.

  4. #4
    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
    Il faut jouer avec les sinus et cosinus

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    float r_angle = PI * angle / 180;
    float r_inclinaison = PI * inclinaison / 180;
     
    float sin_angle = sinf(r_angle);
    float cos_angle = cosf(r_angle);
     
    float cos_inclinaison = cosf(r_inclinaison);
    float sin_inclinaison = sinf(r_inclinaison);
     
    camX = sin_angle * cos_inclinaison * distance + look_x
    camY = sin_inclinaison * distance + look_y
    camZ = cos_angle * cos_inclinaison * distance + look_z
    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse, oui j'ai réussi.

    Mais en faite, j'aimerais plutôt faire une rotation de mon objet (c'est un cube et ce n'est pas un model je l'ai créer avec des vertices) directement et laisser la caméra fixe.

    Pour la rotation Droite - Gauche c'est ok.

    Il y a toujours un problème pour la rotation verticale.

    Lorsque je fais bouger ma souris vers le haut j'aimerais que le cube tourne vers le haut et si je descend ma souris le cube tourne dans le sens inverse.

    Est-ce que cette méthode est bien pour faire cette rotation :

    Pré-requis:

    Le cube est placé en 0, 0, 0.

    La caméra est placé en 50, 50, 50 (mais on peut la placer ou on veut mais elle restera fixe).

    Créer un axe "imaginaire" qui est perpendiculaire à l'axe de la caméra en 0, 0, 0

    C'est grâce à cette axe que je ferais la rotation Haut - Bas.

    Des que je bouge sur la droite ou sur la gauche il faut que je replace l'axe perpendiculairement à l'axe de la vue.

    Est-ce que vous savez comment faire ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Vector3 vecteur1 = new Vector3(-50.0f, 0.0f, 50.0f);
    Vector3 vecteur2 = new Vector3(50.0f, 0.0f, -50.0f);<br>
    Vector3 normal = Vector3.Cross(firstvec, secondvec);
     
    normal.Normalize();
     
    World = Matrix.CreateTranslation(Position) * Matrix.CreateRotationY(RotationY) * Matrix.CreateFromAxisAngle(normal, RotationX);
    Merci.

  6. #6
    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
    Je vous conseille d’utiliser les Quaternion de XNA
    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.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Est-ce que tu as un exemple d'utilisation simple ? stp

    Je sais je peux regarder sur google mais si tu peux m'expliquer se serait vraiment très gentil

    Merci.

    En tout cas les Quaternion c'est ce qui est adapter pour mon cas ?

    J'ai modifier mon code mais comment je fais pour avoir le vecteur normal (perpendiculaire) à l'axe de ma vue ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Vector3 vector1 = new Vector3(-1.0f, 0.0f, 0.0f);
    Vector3 vector1 = new Vector3(0.0f, 0.0f, -1.0f);
     
    Vector3 vectorNormal = Vector3.Cross(vector1, vector2);
     
    vectorNormal.Normalize();
     
    Rotation = Quaternion.CreateFromAxisAngle(vectorNormal, RotationX) // Mon rotationX est bon
     
    World = Matrix.Translation(Position) * Matrix.CreateRotationY(RotationY) * Matrix*CreateFromQuaternion(Rotation);

  8. #8
    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
    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.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Je comprend pas ce que tu veux que je regarde.

    En quoi les quaternion vont m'aider à faire un vecteur normal en 0, 0, 0 à l'axe de ma vue ?

  10. #10
    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
    Pour le vecteur normal en rien. Pour faire la rotation en tout.
    Il n'y a pas besoin de vecteur normal dans une rotation. Si c'est pour éviter le problème des axes de rotation une fois l'objet tourné (Gimbal Lock), alors le Quaternion est la solution.
    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.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Ok je comprend.

    Je vais regarder avec les quaternion alors je te tiens au courant si j'ai trouvé.

    Par contre pour la rotation Haut - Bas sa sera toujours par rapport à l'axe X ou X la rotation ?

  12. #12
    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
    Ce sera par rapport à l'axe X du repère du monde.
    Soit : (1, 0, 0)
    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.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Oui mais dans ce cas quand je vais monter ma souris vers le haut.

    Mon cube ne fera pas une rotation verticale mais toujours par rapport à l'axe que tu dis.

    Il faut donc bien que je créer un "axe temporaire" et que j'utilise cette axe pour faire ma rotation toujours verticale non ?

    Désolé d'insister

    Là j'ai refait mon code du coup pour la rotation droite gauche c'est impeccable même quand j'inverse mon cube il n'inverse pas le droite gauche.

    Et pour la rotation verticale j'ai un doute .. c'est presque ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Vector3 vectorNormal = Vector3.Cross(Vector3.UnitY, Camera.Position);
     
    vectorNormal.Normalize();
     
    Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(vectorNormal, RotationX) * Rotation);
     
    World = Matrix.Translation(Position) * Matrix.CreateRotationY(RotationY) * Matrix*CreateFromQuaternion(Rotation);

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 184
    Points : 46
    Points
    46
    Par défaut
    Donc mon problème est résolu.

    Voici le code pour faire tourner un objet à 360° avec la souris grâce aux quaternion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float acceleration = 0.01f;
    pour la rotation Gauche - Droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float rapport = mouseState.X - Position.X;
    float radians = rapport * acceleration;
     
    Objet.Rotate(Vector3.UnitY, radians);
    pour la rotation Haut - Bas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Vector3 normalVector = Vector3.Cross(Vector3.UnitY, Camera.Position);
     
    normalVector.Normalize();
     
    float rapport = mouseState.Y - Position.Y;
    float radians = rapport * acceleration;
     
    Objet.Rotate(normalVector, radians);
    Attributs du cube :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Vector3 Position;
    public Quaternion Rotation;
    public Matrix World;
    Méthode de rotation du cube :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void Update(GameTime gameTime)
    {
        World = Matrix.CreateTranslation(Position) * Matrix.CreateFromQuaternion(Rotation);
    }
     
    public void Rotate(Vector axis, float radians)
    {
        Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(axis, radians) * Rotation);
    }
    Merci de m'avoir aider.

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

Discussions similaires

  1. XNA 4 Rotation BoundingBox
    Par jeyGey dans le forum XNA/Monogame
    Réponses: 3
    Dernier message: 13/04/2013, 12h01
  2. [Débutant] [C# XNA]Probleme rotation
    Par Exec57 dans le forum C#
    Réponses: 12
    Dernier message: 03/12/2012, 19h07
  3. Rotation voiture 360° style site audi ou volkswagen
    Par mohnumber7 dans le forum Flash
    Réponses: 4
    Dernier message: 22/08/2009, 19h46
  4. [debutant] Rotation autour d'un cube
    Par DiGiTAL_MiDWAY dans le forum OpenGL
    Réponses: 8
    Dernier message: 20/06/2005, 19h26
  5. Texture sur un cube en rotation sous Delphi !!!
    Par Cosmo dans le forum DirectX
    Réponses: 1
    Dernier message: 06/01/2004, 21h14

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