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

DirectX Discussion :

problème de Rotation


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    Par défaut problème de Rotation
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // For the world matrix, rotate the object about the y-axis.
     
    // Set up the rotation matrix to generate one full rotation (2*PI radians)
    // every 1000 ms. To avoid the loss of precision inherent in very high
    // floating-point numbers, the system time is modulated by the rotation
    // period before conversion to a radian angle.
    int iTime = Environment.TickCount % 1000;
    float fAngle = iTime * (2.0f * (float)Math.PI) / 1000.0f;
    device.Transform.World = Matrix.RotationY(fAngle);
    J'ai copier le code ci-dessus depuis MSDN.
    je trouve du mal a comprendre le role de la variable iTime dans cette instruction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float fAngle = iTime * (2.0f * (float)Math.PI) / 1000.0f;
    2) je ne vois pas a quoi va nous servir la variable Environment.TickCount dans le code précèdent

    sa definition depuis MSDN :
    "Obtient le nombre de millisecondes écoulées depuis le démarrage du système".

    3) si je vaudrais faire une seule rotation complète que dois je faire

    Je vous remercie de répondre a ces question

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Par défaut
    "angle = temps passé * pas angulaire"

    si tu veux un tour, tu attends que l'angle atteigne 2*D3DX_PI

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    Par défaut
    Citation Envoyé par korsakoff69 Voir le message
    "angle = temps passé * pas angulaire"

    si tu veux un tour, tu attends que l'angle atteigne 2*D3DX_PI
    Je debute avec directx, es que vous pouvez m'expliquer plus s'il vous plait.

  4. #4
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    Par défaut
    En fait, je veux que mon objet 3D fait une rotation (avec certain angle) ou une translation (vers coordonnée donnée) avec certain vitesse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Matrix mat1 = Matrix.RotationY((float)(Math.PI * Beta));
    device.get_Transform().set_World(mat1);
    Le code ci-dessus fait tourné mon objet 3D avec un angle "Beta" avec une vitesse de lumière (je ne vois pas son déplacement de manière ralentie).



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     int iTime = Environment.get_TickCount() % 10000000;
     float fAngle = iTime * ((float)Math.PI/2) / 5000.0f;
     Matrix mat1 = Matrix.RotationY(fAngle);
    device.get_Transform().set_World(mat1);
    Mais le code ci-dessus fait tourné mon objet 3D avec une angle "Beta" avec une vitesse de mon choix, et ça c'est bien , mais le problème c'est qu'il lui fait répété cette rotation avec le même angle a l'infinis.

    Et moi je veux voir le même mouvement une seule fois
    j'espère que je vous ai bien expliqué mon problème

    une petite indication va vraiment m'aider
    Merci d'avance

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Par défaut A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Angle = ( 2*PI * temps écoulé ) / vitesse rotation angulaire;
     
    Angle total +=  Angle;
     
    if ( Angle Total >= 2*PI )  { quitte la fonction; }
    la vitesse de rotation est contrôlée par la vitesse de rotation angulaire :

    ( combien de radians de rotation * combien de temps écoulé depuis le dernier appel à la fonction )

    et si la somme des angles >= 2*PI, c'est qu'on a fait un tour

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 167
    Par défaut
    j'ai modifié mon code , en basant sur votre explication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    float angletotal=0;
     int iTime = Environment.get_TickCount() % 1000;
     float fAngle = iTime * ((float)Math.PI/2) / 1000.0f;
     angletotal = fAngle + angletotal;
     
    		if (angletotal < ((float)Math.PI/2))
    		{
    			Matrix mat1 = Matrix.RotationY(fAngle);
                             device.get_Transform().set_World(mat1);
    		}
    Mais cette fois mon objet ne tourne pas.

    Si vous avez des liens vers des tutoriel ou des sites qui parle sur la vitesse de rotation et la vitesse de rotation angulaire,ça va m'aidé largement de comprendre ces 2 concept.

    Merci d'avance

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

Discussions similaires

  1. Problème de rotation
    Par Syphon dans le forum Flash
    Réponses: 9
    Dernier message: 11/01/2007, 10h27
  2. Problème de rotation => "rideau noir"
    Par alex6891 dans le forum OpenGL
    Réponses: 19
    Dernier message: 29/07/2006, 21h25
  3. Réponses: 4
    Dernier message: 20/03/2006, 21h26
  4. [OpenGL] problème de rotation 3D
    Par ReiVon dans le forum OpenGL
    Réponses: 3
    Dernier message: 11/04/2005, 09h47
  5. Problème de rotation
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 16h38

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