mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 14:24:53 +08:00
[c] Fix 1-bone IK, see #1692.
This commit is contained in:
parent
dcc6925e90
commit
93d78523c4
@ -72,7 +72,7 @@ void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, int /*bo
|
||||
spBone* p = bone->parent;
|
||||
float pa = p->a, pb = p->b, pc = p->c, pd = p->d;
|
||||
float rotationIK = -bone->ashearX - bone->arotation;
|
||||
float tx = 0, ty = 0, sx = 0, sy = 0, s = 0;
|
||||
float tx = 0, ty = 0, sx = 0, sy = 0, s = 0, sa = 0, sc = 0;
|
||||
if (!bone->appliedValid) spBone_updateAppliedTransform(bone);
|
||||
|
||||
switch(bone->data->transformMode) {
|
||||
@ -81,11 +81,12 @@ void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, int /*bo
|
||||
ty = targetY - bone->worldY;
|
||||
break;
|
||||
case SP_TRANSFORMMODE_NOROTATIONORREFLECTION: {
|
||||
float ps;
|
||||
rotationIK += ATAN2(pc, pa) * RAD_DEG;
|
||||
ps = ABS(pa * pd - pb * pc) / (pa * pa + pc * pc);
|
||||
pb = -pc * ps;
|
||||
pd = pa * ps;
|
||||
s = ABS(pa * pd - pb * pc) / (pa * pa + pc * pc);
|
||||
sa = pa / bone->skeleton->scaleX;
|
||||
sc = pc / bone->skeleton->scaleY;
|
||||
pb = -sc * s * bone->skeleton->scaleX;
|
||||
pd = sa * s * bone->skeleton->scaleY;
|
||||
rotationIK += ATAN2(sc, sa) * RAD_DEG;
|
||||
}
|
||||
default: {
|
||||
float x = targetX - p->worldX, y = targetY - p->worldY;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user