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 :

[Débutant]maths et matrices de rotation ...


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Points : 16
    Points
    16
    Par défaut [Débutant]maths et matrices de rotation ...
    j'ai un problème existanciel et mathématique
    les angles que l'on doit spécifier dans une matrice de rotation
    en quoi ils sont ???

    j'ai un problème de conversion
    j'ai des données concernant chaque objet qui sont disposé selon une rotation dont la valeur va de 0 à 512 pour x pour y et pour z dans un repère cartésien normal
    la plupart des objets n'ont qu'une valeur pour la rotation autour de l'axe z
    pour retrouver l'angle en degré je sais que la valeur il faut la diviser par 512 et la multiplier par 360

    comment je dois convertir cette valeur pour les appliquer à une matrice de rotation de direct x ?

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut convertir en radians.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    j'ai beau convertir en radians
    j'ai quand meme certains de mes objets en sens inverse =(

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu peux expliquer plus en détail ton problème ? Ou/et montrer un bout de code qui pose problème ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    dans ma fonction render j'utilise ces transformations juste avant d'afficher les triangles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		D3DXMATRIX matWorld;
    		D3DXMATRIX matRotation; 
    		D3DXMATRIX matScaling; 
    		D3DXMATRIX matTranslation; 
    		D3DXMatrixIdentity(&matWorld); 
    		D3DXMatrixIdentity(&matRotation); 
    		D3DXMatrixIdentity(&matScaling); 
    		D3DXMatrixIdentity(&matTranslation); 
    		D3DXMatrixRotationYawPitchRoll(&matRotation, rota_z, rota_x, rota_y); 
    		D3DXMatrixScaling(&matScaling, scale_x, scale_y, scale_x);
    		D3DXMatrixTranslation(&matTranslation, pos_x, pos_z, pos_y); 
    		matWorld = matRotation * matScaling * matTranslation;
    		pd3dDevice->SetTransform( D3DTS_WORLD,  &matWorld );
    et dans la fonction OneTimeSceneInit() j'initialise les valeurs ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	pos_x = infos->x;
    	pos_y = infos->y;
    	pos_z = infos->z;
     
    	rota_x = infos->rota_x / 512 * D3DX_PI * 2;
    	rota_y = infos->rota_y / 512 * D3DX_PI * 2;
    	rota_z = infos->rota_z / 512 * D3DX_PI * 2;
     
    	scale_x = infos->scale_x;
    	scale_y = infos->scale_y;
    infos correspond à des données que je récupère en lisant les fichiers .wld d'everquest

    comme je l'ai expliqué les rotations sont dans ce fichier des valeurs de 0 à 512, 512 correspondant à 360° donc à 2*PI si j'ai bien tout compris ?

    comme effet en rendu, j'ai en fait certains de mes objets qui sont tournés dans l'axe des x dans le bon sens, mais quand ils sont tournés dans l'axe des z ils sont en sens inverse =(

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Alors pour convertir en radian tu peux utiliser D3DXToRadian(ton float).
    Sinon ton repère en directX est à main gauche, c'est à dire que ton axe Z ne vient pas vers toi mais vers le font de ton écran.
    En esperant que ca t'aide...
    @+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    en fait j'ai changé les y en -y, les objets se retrouvent dans le bon sens, les rotations fonctionnent bien
    mais malheureusement, le monde se retrouve inversé =(

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    j'ai trouvé =)
    la rotation z doit être inversée visiblement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          D3DXMatrixRotationYawPitchRoll(&matRotation, - rota_z, rota_x, rota_y);
    merci

    voilà une photo =) mes statues sont bien dans le bon sens maintenant =)


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

Discussions similaires

  1. Decomposition matrice de rotation
    Par harsh dans le forum Mathématiques
    Réponses: 5
    Dernier message: 24/09/2010, 15h16
  2. matrices de rotation
    Par vincent0 dans le forum OpenGL
    Réponses: 10
    Dernier message: 09/07/2006, 09h19
  3. Réponses: 1
    Dernier message: 12/01/2006, 09h56
  4. angle d'euler et matrice de rotation
    Par mat_monroe dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 02/05/2005, 11h06
  5. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59

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