mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Disable inherit rotation can be stable if also disabling reflection.
This commit is contained in:
parent
6ef7cf3ba4
commit
eb1e8e7942
@ -154,20 +154,36 @@ public class Bone implements Updatable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case noRotationOrReflection: {
|
case noRotationOrReflection: {
|
||||||
if (pa * pd - pb * pc < 0) {
|
float psx = (float)Math.sqrt(pa * pa + pc * pc), psy, prx;
|
||||||
pb = -pb;
|
if (psx > 0.0001f) {
|
||||||
pd = -pd;
|
psy = Math.abs((pa * pd - pb * pc) / psx);
|
||||||
|
prx = atan2(pc, pa) * radDeg;
|
||||||
|
} else {
|
||||||
|
psx = 0;
|
||||||
|
psy = (float)Math.sqrt(pb * pb + pd * pd);
|
||||||
|
prx = 90 - atan2(pd, pb) * radDeg;
|
||||||
}
|
}
|
||||||
rotation -= atan2(pc, pa) * radDeg;
|
pa = cosDeg(prx) * psx;
|
||||||
|
pb = cosDeg(prx + 90) * psy;
|
||||||
|
pc = sinDeg(prx) * psx;
|
||||||
|
pd = sinDeg(prx + 90) * psy;
|
||||||
float rotationY = rotation + 90 + shearY;
|
float rotationY = rotation + 90 + shearY;
|
||||||
float la = cosDeg(rotation + shearX) * scaleX;
|
float la = cosDeg(rotation + shearX) * scaleX;
|
||||||
float lb = cosDeg(rotationY) * scaleY;
|
float lb = cosDeg(rotationY) * scaleY;
|
||||||
float lc = sinDeg(rotation + shearX) * scaleX;
|
float lc = sinDeg(rotation + shearX) * scaleX;
|
||||||
float ld = sinDeg(rotationY) * scaleY;
|
float ld = sinDeg(rotationY) * scaleY;
|
||||||
a = pa * la + pb * lc;
|
float za = pa * la + pb * lc;
|
||||||
b = pa * lb + pb * ld;
|
float zb = pa * lb + pb * ld;
|
||||||
c = pc * la + pd * lc;
|
float zc = pc * la + pd * lc;
|
||||||
d = pc * lb + pd * ld;
|
float zd = pc * lb + pd * ld;
|
||||||
|
pa = cosDeg(-prx);
|
||||||
|
pb = cosDeg(90 - prx);
|
||||||
|
pc = sinDeg(-prx);
|
||||||
|
pd = sinDeg(90 - prx);
|
||||||
|
a = za * pa + zb * pc;
|
||||||
|
b = za * pb + zb * pd;
|
||||||
|
c = zc * pa + zd * pc;
|
||||||
|
d = zc * pb + zd * pd;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case noScale:
|
case noScale:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user