code: public void getWorldRotations(float[] rotations)
      {
          if (rotations.length != mBones.length * 4)
          {
              throw new IllegalArgumentException("Destination array is the wrong size");
          }
          sync();
          for (int i = 0; i < mBones.length; i++)
          {
              Bone bone = mBones[i];
              int t = i * 4;
  
              bone.WorldMatrix.getUnnormalizedRotation(mTempQuat);
              mTempQuat.normalize();
  
              rotations[t++] = mTempQuat.x;
              rotations[t++] = mTempQuat.y;
              rotations[t++] = mTempQuat.z;
              rotations[t] = mTempQuat.w;
          }
      }
docs: Get the world rotations for all the bones in this pose.
  <p>
  The world space rotations for each bone are copied into the
  destination array as quaterions in the order of their bone index.
  The array must be as large as the number of bones in the skeleton
  (which can be obtained by calling {@link #getNumBones}).
  <p>
  All bones in the skeleton start out at the origin oriented along the bone axis (usually 0,0,1).
  The pose orients and positions each bone in the skeleton with respect to this initial state.
  The world bone matrix expresses the orientation and position of the bone relative
  to the root of the skeleton. This function returns the world space bone rotations
  as an array of quaternions.
  @param rotations	destination array to get world space joint rotations.
  @see #setWorldRotations
  @see #getWorldRotation
  @see #getWorldMatrix
  @see #getNumBones
  @see GVRSkeleton#setBoneAxis