code: public void transformPose(GVRPose newpose)
      {
          int numbones = getNumBones();
          Matrix4f rootMtx = owner.getTransform().getModelMatrix4f();
  
          rootMtx.getUnnormalizedRotation(mTempQuatB);
          mTempQuatB.conjugate();
          newpose.sync();
          for (int i = 0; i < numbones; ++i)
          {
              GVRPose.Bone srcBone = newpose.getBone(i);
  
              if ((mBoneOptions[i] & BONE_LOCK_ROTATION) == 0)
              {
                  rootMtx.mul(mTempMtx, mTempMtx);
                  mTempMtx.mul(srcBone.LocalMatrix, mTempMtx);
                  mPose.setWorldMatrix(i, mTempMtx);
              }
          }
          updateBonePose();
      }
docs: Updates the current pose of a skeleton and applies the
  transform of the {@link GVRSkeleton} owner.
  <p>
  This function does not require the input pose to be relative to the root bone,
  it will also accept poses relative to the bind pose of the skeleton.
  It does not replace the current pose with the new pose, it updates the
  current pose in place. If a bone is locked, it's input is ignored.
  
  @param newpose new pose to apply, supports all pose spaces.
  @see #setPose
  @see GVRPose