Re: Slider sur une shapekey en python.

Posté par lucky le 24/5/2020 15:49:01
Re, bon j'ai passé un peu de temps sur ton problème :)

Il faut savoir que tu t'attaques un problème épineux, les rotations en 3D c'est toujours complex!
Il y a le système euler, et le système quaternions... donner des valeurs absolue et claire en degré est uniquement possible en euler, mais l'inconvénient c'est que ça amène parfois au problème de "gimbal lock" ("mauvaises" rotations), les quaternions en revanche seront toujours fiables, mais ils sont construits avec 4 valeurs (W,X,Y,Z) difficiles à comprendre, donc il faut passer par une conversion d'angle euler>quaternion si tu souhaites leur assigner une valeur en degré "visuelle".
Dans le script, tu assignes une valeur en X, Y, et Z seulement, ce qui n'a pas trop de sens car les quaternions fonctionnant différemment d'euler, tu n'auras pas le résultat escompté.

Passer par la fonction rotate() peut être effectivement une bonne solution car ça permet de laisser les calculs de rotation, conversion d'angles et axes référentiels à Blender. Le problème c'est que tu ne peux pas assigner une valeur de rotation absolue avec, mais une transformation par rotation, ce qui est différent: tu tournes la bone de tel angle par rapport à sa rotation actuelle.

Je vois deux solution possibles:
1) Tu enregistre la valeur de rotation de la bone au départ (pour simplifier on part du principe que ce sera toujours 0 ici), et tu assignes cette valeur au début de l'update, et puis enchainer avec la fonction rotate()

2) Ou tu passes le mode de rotation en Euler et set directement la valeur d'angle pour l'axe que tu souhaites. Attention les valeurs de rotation sont toujours en coordonnées locales, alors que transform.rotate() peut utiliser des coordonnées globales ou locales. L'axe Z globale devient X (0) donc pour cette bone.

Voilà le blend (j'ai passé le mode de rotation en euler et j'ai ajouté une conversion degré-radians pour plus de clarté si on peut dire).

https://pasteall.org/blend/34c70ca0be7d469bad8dcebf4077d265

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=2&topic_id=49950&post_id=583245