code: protected void doPick()
      {
          GVRSceneObject owner = getOwnerObject();
          GVRTransform trans = (owner != null) ? owner.getTransform() : null;
          GVRPickedObject[] picked;
  
          if (mPickClosest)
          {
              GVRPickedObject closest = pickClosest(mScene, trans,
                  mRayOrigin.x, mRayOrigin.y, mRayOrigin.z,
                  mRayDirection.x, mRayDirection.y, mRayDirection.z);
              if (closest != null)
              {
                  picked = new GVRPickedObject[] { closest };
              }
              else
              {
                  picked = new GVRPickedObject[0];
              }
          }
          else
          {
              picked = pickObjects(mScene, trans,
                      mRayOrigin.x, mRayOrigin.y, mRayOrigin.z,
                      mRayDirection.x, mRayDirection.y, mRayDirection.z);
          }
          generatePickEvents(picked);
          mMotionEvent = null;
      }
docs: Scans the scene graph to collect picked items
  and generates appropriate pick events.
  This function is called automatically by
  the picker every frame.
  @see IPickEvents
  @see ITouchEvents
  @see #pickObjects(GVRScene, float, float, float, float, float, float)