1. Compose a pick ray with and origin and direction:
    1. float viewportX = (2.0f * getMousePosX()) / viewportWidth - 1.0f;
    2. float viewportY = (2.0f * (viewportHeight - getMousePosY())) / viewportHeight - 1.0f;
    3. Vector3 gdxOrigin = new Vector3();
    4. gdxOrigin.set(viewportX, viewportY, -1.0f);
    5. gdxOrigin.prj(camera.invProjectionView);
    6. Vector3 gdxDirection = new Vector3();
    7. gdxDirection.set(viewportX, viewportY, 1.0f);
    8. gdxDirection.prj(camera.invProjectionView);
    9. gdxDirection.sub(gdxOrigin).nor();
    10. // collide geometries

    One way to do picking is to do CPU based collision math using Euclid, a performant and comprehensive vector math and geometry library.