Blender. Kopiowanie rotacji w jedną stronę.
Szybka wieczorna wprawka z Pythona w Blenderze.
Zadanie:
Zrobić tak, żeby obiekt kopiował rotację drugiego, ale tylko w jedną stronę – na przykład tak jak działa napęd w rowerze – kręcąc pedałami do przodu obracamy kołem, a kręcenie do tyłu nie ma wpływu na rotację koła.
Wygląda to tak:
Działamy.
Uruchamiamy Blendera, tworzymy kostkę udającą pedały i dysk udający koło.
Obu obiektom nadajemy Constraint Limit Rotation i blokujemy rotację po osiach Y i Z:
Przechodzimy do Scripting i tworzymy skrypt o treści:
import bpy last_x = 0 disc_x = 0 def limit_value(x): global last_x global disc_x if x > last_x: disc_x = disc_x + (x - last_x) last_x = x return disc_x bpy.app.driver_namespace["limit_value"] = limit_value
Uruchamiamy ten skrypt wybierając z menu Text->Run script lub klikając Alt-P.
Wracamy do okienka zakładki Modeling, wybieramy nasz dysk i w menu Transform (wciskamy N jeśli go nie widać) klikamy prawym klawiszem myszki na polu Rotation: X
Wybieramy Edit driver:
W okienku które się pojawi wybieramy Type: Scripted expression, w Expression wpisujemy: limit_value(var).
Jako Input value wybieramy (x) var i jako Object: wybieramy naszego Cube udającego pedały.
Tak jak na zrzucie poniżej:
I tyle – teraz obracanie kostki w lewo obraca dysk w lewo a obracanie kostki w prawo nie wpływa na obrót dysku.
Dla leniwych .blend: