Эта проблема обычно известна как «сбор». Сам по себе OpenGL просто рисует вещи, об управлении объектами геометрии говорить не приходится (в OpenGL есть объекты, но это то, что вы обычно называете ресурсами).
Обычный способ реализации выбора OpenGL в эти дни заключается в получении значения глубины в позиции щелчка (glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)
) и его проецировании в мировое пространство (gluUnProject(...)
). Это дает вам (x,y,z)
нажатой точки.
Поскольку вы обычно управляете своей геометрией в некоторой пространственной структуре подразделений (BSP, Kd и т. Д.), Перемещая структуру подразделений до координат щелчка, вы можете получить объект таким способом.
Другой метод - проецирование луча, который следует за щелчком мыши, на сцену и тестирование пересечения луча / ограничивающего объема.
Я настоятельно не рекомендую использовать старый механизм выбора OpenGL: он медленный и громоздкий в использовании.