@Override public Transform invert(final Transform store) { final Transform transform = super.invert(store); if (!Transform.isValid(transform)) { throw new InvalidTransformException("Transform is invalid"); } return transform; }
@Override public Transform invert(final Transform store) { final Transform transform = super.invert(store); if (!Transform.isValid(transform)) { throw new InvalidTransformException("Transform is invalid"); } return transform; }
@Test public void testInvert() { final Transform trans1 = new Transform(); trans1.setRotation(new Matrix3().applyRotationZ(3 * MathUtils.QUARTER_PI)); final Transform trans2 = trans1.invert(null); assertEquals(Transform.IDENTITY, trans1.multiply(trans2, null)); trans1.setIdentity().invert(trans1); assertEquals(Transform.IDENTITY, trans1); }
/** * Update our local joint transforms so that they reflect the skeleton in bind pose. */ public void setToBindPose() { final Transform temp = Transform.fetchTempInstance(); // go through our local transforms for (int i = 0; i < _localTransforms.length; i++) { // Set us to the bind pose _localTransforms[i].set(_skeleton.getJoints()[i].getInverseBindPose()); // then invert. _localTransforms[i].invert(_localTransforms[i]); // At this point we are in model space, so we need to remove our parent's transform (if we have one.) final short parentIndex = _skeleton.getJoints()[i].getParentIndex(); if (parentIndex != Joint.NO_PARENT) { // We remove the parent's transform simply by multiplying by its inverse bind pose. Done! :) _skeleton.getJoints()[parentIndex].getInverseBindPose().multiply(_localTransforms[i], temp); _localTransforms[i].set(temp); } } Transform.releaseTempInstance(temp); updateTransforms(); }
/** * Update our local joint transforms so that they reflect the skeleton in bind pose. */ public void setToBindPose() { final Transform temp = Transform.fetchTempInstance(); // go through our local transforms for (int i = 0; i < _localTransforms.length; i++) { // Set us to the bind pose _localTransforms[i].set(_skeleton.getJoints()[i].getInverseBindPose()); // then invert. _localTransforms[i].invert(_localTransforms[i]); // At this point we are in model space, so we need to remove our parent's transform (if we have one.) final short parentIndex = _skeleton.getJoints()[i].getParentIndex(); if (parentIndex != Joint.NO_PARENT) { // We remove the parent's transform simply by multiplying by its inverse bind pose. Done! :) _skeleton.getJoints()[parentIndex].getInverseBindPose().multiply(_localTransforms[i], temp); _localTransforms[i].set(temp); } } Transform.releaseTempInstance(temp); updateTransforms(); }