3D Picking

  1. Compose a pick ray with and origin and direction:
float viewportX = (2.0f * getMousePosX()) / viewportWidth - 1.0f;
float viewportY = (2.0f * (viewportHeight - getMousePosY())) / viewportHeight - 1.0f;

Vector3 gdxOrigin = new Vector3();
gdxOrigin.set(viewportX, viewportY, -1.0f);

Vector3 gdxDirection = new Vector3();
gdxDirection.set(viewportX, viewportY, 1.0f);

// 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.