Conical Rotation Limits for Ragdoll Author Message
llynx
Member

 Post: #1 Conical Rotation Limits for Ragdoll I've noticed that quite often ragdoll physics results in "awkward" bending and rotation. Is there a way to implement conical rotation limits between bones in a skeleton? [I've experimented with dummy ragdoll bones as rotation limiters with moderate success (relatively accurate joint rotation but sometimes results in limbs "floating" above the ground) but still doesn't stop things like 180 degree rotation of a head] (This post was last modified: 01-09-2011 04:22 AM by llynx.)
01-09-2011 04:00 AM
Esenthel

 Post: #2 RE: Conical Rotation Limits for Ragdoll Hi, What is your naming system for bones? (what names)
01-10-2011 05:19 PM
llynx
Member

 Post: #3 RE: Conical Rotation Limits for Ragdoll     I have been working with ragdoll bone orientations and can fix the rotation issue based on rotation differences with parent bones, and should be able to work something out to limit the angles bones. Unless there is a better way of doing this? (This post was last modified: 01-10-2011 06:37 PM by llynx.)
01-10-2011 06:35 PM
Esenthel
 Post: #4 RE: Conical Rotation Limits for Ragdoll currently the Ragdoll class creates the joints and sets the angular limits automatically. it is dependent on the bone names a little. something like that: Code: ```if(Equal(rb.name,"Head") || Equal(rb.name,"Bip01_Head"))                {                   if(Equal(rp.name,"Neck"  ) || Equal(rb.name,"Bip01_Neck"      ))_joints.New().createBodySpherical(rb.actor, rp.actor, sb.pos*_scale, sb.dir, DegToRad(30), DegToRad(35));                   else                                                            _joints.New().createBodySpherical(rb.actor, rp.actor, sb.pos*_scale, sb.dir, DegToRad(50), DegToRad(40));                }else                if(Equal(rb.name,"Neck"     ) || Equal(rb.name,"Bip01_Neck"      ))_joints.New().createBodySpherical(rb.actor, rp.actor, sb.pos*_scale, sb.dir, DegToRad( 20), DegToRad( 5));else                if(Equal(rb.name,"ShoulderL") || Equal(rb.name,"Bip01_L_Clavicle"))_joints.New().createBodySpherical(rb.actor, rp.actor, sb.pos*_scale, sb.dir, DegToRad(  5), DegToRad( 5));else                if(Equal(rb.name,"ShoulderR") || Equal(rb.name,"Bip01_R_Clavicle"))_joints.New().createBodySpherical(rb.actor, rp.actor, sb.pos*_scale, sb.dir, DegToRad(  5), DegToRad( 5));else                if(Equal(rb.name,"ArmLU"    ) || Equal(rb.name,"Bip01_L_UpperArm"))_joints.New().createBodySpherical(rb.actor, rp.actor, sb.pos*_scale, sb.dir, DegToRad( 80), DegToRad(30));else``` currently this is built-in and can't be modified