Да, ответ на (первый взгляд) простой вопрос - обширнвя тема
В самом старом OpenGL был механизм "selection", позволяющий определить на какой полигон щёлкнули.
"Было да сплыло" как началась котовасия с шейдерами. Можно протолунуться через "compatibility profile" но это бесперспективно
Я подобную задачу решаю на плюсовом коде. Клик пользователя преобразую в линию, ищу пересечение этой линии с параллелепипедами, которые описывают объекты. Если таких больше 1, то ищу пересечения с треугольниками в объектах
Говорят просто "куб" или "bounding box", всем ясно что он может иметь разные размеры по осям. И точнее "луч" вместо "линия". И фейс - не только треугольник.
Да, если выбор только объектов целиком - то можно отделаться bounding box'ом. Впрочем и тут .. такие милые задачки как пересечение луча с кубом многих раздражают, ведь хочется "взять готовое и не париться", но так не выходит
А вот с выбором фейсов или вертексов - мрачно. Sofware реализация несложна, но может оказаться недостаточной по скорости. Популярный совет - рендерить каждый фейс своим цветом и потом читать картинку. Лично мне такой способ не кажется хорошим - возможности ограничены, а возни с шейдерами все равно немало