mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-07 07:44:53 +08:00
[cpp] Fix 1-bone IK, see #1692.
This commit is contained in:
parent
93d78523c4
commit
2b2d32f7a2
@ -56,10 +56,12 @@ void IkConstraint::apply(Bone &bone, float targetX, float targetY, bool compress
|
||||
ty = targetY - bone._worldY;
|
||||
break;
|
||||
case TransformMode_NoRotationOrReflection: {
|
||||
rotationIK += MathUtil::atan2(pc, pa) * MathUtil::Rad_Deg;
|
||||
float ps = MathUtil::abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
|
||||
pb = -pc * ps;
|
||||
pd = pa * ps;
|
||||
float s = MathUtil::abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
|
||||
float sa = pa / bone._skeleton.getScaleX();
|
||||
float sc = pc / bone._skeleton.getScaleY();
|
||||
pb = -sc * s * bone._skeleton.getScaleX();
|
||||
pd = sa * s * bone._skeleton.getScaleY();
|
||||
rotationIK += MathUtil::atan2(sc, sa) * MathUtil::Rad_Deg;
|
||||
}
|
||||
default:
|
||||
float x = targetX - p->_worldX, y = targetY - p->_worldY;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user