西昌.何雨锋
ragdoll
布娃娃约束是用在布娃娃身上的一种部分约束,并非整个布娃娃。
首先来了解几个概念:
plane 平面,也就是关节在平行于地平面的面上旋转,如汽车左右开。
twist 扭转,也就是关节自己旋转,如水泥搅拌机。
cone 锥体,也就是一个圆锥体在关节位置,关节只能在这个圆锥体里旋转运动。
展开你的上臂,它作扇形运动,无论是平着的还是立着的,都是plane.上臂不作扇形运动,而只是沿长轴旋转,就是twist,实际上,这个角度不大。
约束数据位置在:
Physics/Dynamics/Constraint/Bilateral/Ragdoll/hkpRagdollConstraintData.h
另外要用到约束实例类
Physics/Dynamics/Constraint/hkpConstraintInstance.h
要使用这个约束,首先就必须设置plane,twist,cone的最大最小值
这里设置了plane的最小值和最大值为-36度和72度
twist的最小值和最大值为-72度和142度
圆锥体活动范围为36度
尤其注意还有一个函数:
setMaxFrictionTorque(0~1)
值在0-1之间,它可以控制关节的僵硬程度,调节它直到合适。
同样的,hkpRagdollConstraintData也有setInWorldSpace与setInBodySpace两个函数,
参数为hs->setInWorldSpace(可活动的物体位置状态,固定的物体位置状态,两个物体中间那个旋转点位置,twist轴点位置,palne轴点位置)
下图为twist的轴,只能沿红色轴自转。
下图,圆锥体的限制范围。
下图,手臂只能沿兰色plane轴上下扇形运动
下图,plane与cone,我们可以指定在后面一大锥所以它大大剪辑的手臂的运动。前方锥形非常小,因此它不会影响手臂的运动的
下图,当plane与cone结合之后,兰色部分为不可到达区,红色为可到达区,可以看出plane的设置MAX,min值的不同,使前面可活动的范围变大,后面可活动范围变小
下图,两者结合的最后结果
下图,顶视图,中间那个点就是两者之间的中间位置点pivot point.
reference body为固定物体,attached body为被连接的子活动物体
下图,前视图,可以看到,搅拌机的自转,同时,标出了twist axis与palen axis.
这两个参数为hkVector4(1,0,0)和hkVector4(0,1,0)表明了他们是以x轴和y轴作为旋转轴的。
下图,边视图,绿色部分为cone