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

3D Python Discussion :

Blender rotation repére local


Sujet :

3D Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2009
    Messages : 18
    Points : 23
    Points
    23
    Par défaut Blender rotation repére local
    Bonjour.

    J'utilise Blender 2.46 sous Linux.

    Dans un script Python comment fait on pour appliquer à un objet une rotation dans son
    repére local.

    Exemple: Sur un plan incliné à 30° selon l'axe x, je veux poser un parallélépipède rectangle
    en diagonnalle, angle de 45°.

    Si j'utilise la fonction:

    setEuler(euler)
    Sets the object's localspace rotation according to the specified Euler angles.
    Il me faut appliquer les valeurs suivantes en radians:
    [0.251899, 0.244267, -0.754317]

    Et pas:
    [ PI*30/180, 0, PI*45/180]

    Voir mon fichier exemple01.blend

    Probléme je ne sais pas comment calculer ces valeurs et je n'ai pas trouvé dans
    l'API python de blender 2.46 de fonctions pour effectuer des rotations dans le
    repére local d'un objet.


    A blenderclan... , je pensais avoir trouvé mon bonheur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    RotationMatrix = Blender.Mathutils.RotationMatrix
     
    MatrixRepresentation = RotationMatrix( 30, 3, 'x' )
    MatrixRepresentation *= RotationMatrix( 0, 3, 'y' )
    MatrixRepresentation *= RotationMatrix( 45, 3, 'z' )
     
    QuaternionRepresentation = Blender.Mathutils.Matrix( MatrixRepresentation ).toQuat()
     
    print QuaternionRepresentation, "\n"
    print QuaternionRepresentation.toEuler()
    Malheureusement l'exécution donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [0.892399, 0.239118, 0.099046, 0.369644](quaternion) 
     
    [30.000000, -0.000000, 45.000000](euler)
    Les rotations se font dans le repére global.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2009
    Messages : 18
    Points : 23
    Points
    23
    Par défaut Désolé
    A l'adresse blenderartists.org... j'ai trouvé la solution.
    Il faut créer une matrice de rotation avec la fonction RotationMatrix et la multiplier avec la matrice de l'object.
    Pour effectuer une rotation de 15° autour de l'axe z ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mr = RotationMatrix(15, 4, 'z')
     
    m = mr * obj.getMatrix()
    obj.setMatrix(m)
    C'est tout bête. A exemple04.blend un exemple ou je fait tourner un cylindre comme une roue, quel que soit son orientention.
    Mon problème vient surtout du fait que je ne comprend rien au calcul matriciel. Désolé de vous faire perdre votre temps.

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

Discussions similaires

  1. Trouver repère local d'un objet !
    Par info_sara dans le forum Mathématiques
    Réponses: 22
    Dernier message: 27/06/2012, 22h46
  2. repère scene vere repère local?
    Par info_sara dans le forum Ogre
    Réponses: 0
    Dernier message: 24/06/2012, 23h01
  3. Rotation d'un cube à partir du repère global
    Par MugenGL dans le forum OpenGL
    Réponses: 1
    Dernier message: 03/05/2008, 18h11
  4. Repère local, repère global et rotation
    Par Licorna dans le forum Mathématiques
    Réponses: 3
    Dernier message: 10/05/2007, 22h56
  5. [Rotations] Rotations Locales/Globales avec Quaternions
    Par Clorish dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 24/05/2005, 17h41

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