Rick Stirling
06-26-2008, 05:05 PM
Whilst trying to move away from biped and towards a custom rig, I've ran into a few issues with setting up joint contraints.
I want to have a function as such:
fn jointlock jointlimitbone xlockmin xlockmax ylockmin ylockmax zlockmin zlockmax =
This function will take in a bone and apply rotational limits in all 3 axis. I've written it, and it works.
fn jointlock jointlimitbone xlockmin xlockmax ylockmin ylockmax zlockmin zlockmax =
(
-- float limit needs to be in radians
jointlimitbone.rotation.controller.X_Rotation.controller = float_limit ()
jointlimitbone.rotation.controller.X_Rotation.controller.upper_limit = degtorad xlockmax
jointlimitbone.rotation.controller.X_Rotation.controller.lower_limit = degtorad xlockmin
jointlimitbone.rotation.controller.X_Rotation.controller.Enable = on
jointlimitbone.rotation.controller.Y_Rotation.controller = float_limit ()
jointlimitbone.rotation.controller.Y_Rotation.controller.upper_limit = degtorad ylockmax
jointlimitbone.rotation.controller.Y_Rotation.controller.lower_limit = degtorad ylockmin
jointlimitbone.rotation.controller.Y_Rotation.controller.Enable = on
jointlimitbone.rotation.controller.Z_Rotation.controller = float_limit ()
jointlimitbone.rotation.controller.Z_Rotation.controller.upper_limit = degtorad zlockmax
jointlimitbone.rotation.controller.Z_Rotation.controller.lower_limit = degtorad zlockmin
jointlimitbone.rotation.controller.Z_Rotation.controller.Enable = on
)
However, I don't always get the rotation limits I expect - the knees and elbows work, but the feet and toes are offset.
Are they in parent space instead of local?
I want to have a function as such:
fn jointlock jointlimitbone xlockmin xlockmax ylockmin ylockmax zlockmin zlockmax =
This function will take in a bone and apply rotational limits in all 3 axis. I've written it, and it works.
fn jointlock jointlimitbone xlockmin xlockmax ylockmin ylockmax zlockmin zlockmax =
(
-- float limit needs to be in radians
jointlimitbone.rotation.controller.X_Rotation.controller = float_limit ()
jointlimitbone.rotation.controller.X_Rotation.controller.upper_limit = degtorad xlockmax
jointlimitbone.rotation.controller.X_Rotation.controller.lower_limit = degtorad xlockmin
jointlimitbone.rotation.controller.X_Rotation.controller.Enable = on
jointlimitbone.rotation.controller.Y_Rotation.controller = float_limit ()
jointlimitbone.rotation.controller.Y_Rotation.controller.upper_limit = degtorad ylockmax
jointlimitbone.rotation.controller.Y_Rotation.controller.lower_limit = degtorad ylockmin
jointlimitbone.rotation.controller.Y_Rotation.controller.Enable = on
jointlimitbone.rotation.controller.Z_Rotation.controller = float_limit ()
jointlimitbone.rotation.controller.Z_Rotation.controller.upper_limit = degtorad zlockmax
jointlimitbone.rotation.controller.Z_Rotation.controller.lower_limit = degtorad zlockmin
jointlimitbone.rotation.controller.Z_Rotation.controller.Enable = on
)
However, I don't always get the rotation limits I expect - the knees and elbows work, but the feet and toes are offset.
Are they in parent space instead of local?
