Qt OpenGL - Как получить объект на основе щелчка мышью - PullRequest
5 голосов
/ 18 июня 2011

Я пытаюсь сделать заявку в Qt-openGL.Здесь я должен знать объект, по которому щелкнули, основываясь на щелчке мышью.Моя идея - сохранить точки (область объекта в QWidget) и сопоставить щелчок мышью с этими точками.Кто-нибудь может сказать, как это сделать? Или любой другой орган может показать что-то еще?

1 Ответ

14 голосов
/ 18 июня 2011

Эта проблема обычно известна как «сбор». Сам по себе OpenGL просто рисует вещи, об управлении объектами геометрии говорить не приходится (в OpenGL есть объекты, но это то, что вы обычно называете ресурсами).

Обычный способ реализации выбора OpenGL в эти дни заключается в получении значения глубины в позиции щелчка (glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)) и его проецировании в мировое пространство (gluUnProject(...)). Это дает вам (x,y,z) нажатой точки.

Поскольку вы обычно управляете своей геометрией в некоторой пространственной структуре подразделений (BSP, Kd и т. Д.), Перемещая структуру подразделений до координат щелчка, вы можете получить объект таким способом.

Другой метод - проецирование луча, который следует за щелчком мыши, на сцену и тестирование пересечения луча / ограничивающего объема.

Я настоятельно не рекомендую использовать старый механизм выбора OpenGL: он медленный и громоздкий в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...