Bugfix: fix for IK constraint: rotation locks are now applied only on

boned woning the constraint and not to all that define it as it was
before.
This commit is contained in:
jmekaelthas 2015-04-12 17:39:18 +02:00
parent f9be42ee62
commit cd97741f9c

View File

@ -88,14 +88,17 @@ public class ConstraintDefinitionIK extends ConstraintDefinition {
if (angle != 0) { if (angle != 0) {
Vector3d cross = currentDir.crossLocal(target).normalizeLocal(); Vector3d cross = currentDir.crossLocal(target).normalizeLocal();
q.fromAngleAxis(angle, cross); q.fromAngleAxis(angle, cross);
if (boneContext.isLockX()) {
q.set(0, q.getY(), q.getZ(), q.getW()); if(bone.equals(this.getOwner())) {
} if (boneContext.isLockX()) {
if (boneContext.isLockY()) { q.set(0, q.getY(), q.getZ(), q.getW());
q.set(q.getX(), 0, q.getZ(), q.getW()); }
} if (boneContext.isLockY()) {
if (boneContext.isLockZ()) { q.set(q.getX(), 0, q.getZ(), q.getW());
q.set(q.getX(), q.getY(), 0, q.getW()); }
if (boneContext.isLockZ()) {
q.set(q.getX(), q.getY(), 0, q.getW());
}
} }
boneTransform.getRotation().set(q.multLocal(boneTransform.getRotation())); boneTransform.getRotation().set(q.multLocal(boneTransform.getRotation()));
@ -124,14 +127,16 @@ public class ConstraintDefinitionIK extends ConstraintDefinition {
Vector3d cross = currentDir.crossLocal(target).normalizeLocal(); Vector3d cross = currentDir.crossLocal(target).normalizeLocal();
q.fromAngleAxis(angle, cross); q.fromAngleAxis(angle, cross);
if (boneContext.isLockX()) { if(bone.equals(this.getOwner())) {
q.set(0, q.getY(), q.getZ(), q.getW()); if (boneContext.isLockX()) {
} q.set(0, q.getY(), q.getZ(), q.getW());
if (boneContext.isLockY()) { }
q.set(q.getX(), 0, q.getZ(), q.getW()); if (boneContext.isLockY()) {
} q.set(q.getX(), 0, q.getZ(), q.getW());
if (boneContext.isLockZ()) { }
q.set(q.getX(), q.getY(), 0, q.getW()); if (boneContext.isLockZ()) {
q.set(q.getX(), q.getY(), 0, q.getW());
}
} }
boneWorldTransform.getRotation().set(q.multLocal(boneWorldTransform.getRotation())); boneWorldTransform.getRotation().set(q.multLocal(boneWorldTransform.getRotation()));