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

###raw>template_hook.ano_emploi###