布娃娃(关节约束)

时间:2021-04-08 10:07:58

西昌.何雨锋

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

布娃娃(关节约束)

 

布娃娃(关节约束)布娃娃(关节约束)布娃娃(关节约束)布娃娃(关节约束)

布娃娃(关节约束)