Как включить проверку глубины для буфера GL_SELECT? - PullRequest
1 голос
/ 01 сентября 2010

Я использую буфер выбора GL для реализации выбора мыши.К сожалению, OpenGL возвращает попадания в буфер выбора даже для объектов, которые полностью закрыты.Например, если за стеной скрыт человек, в буфер выбора будет включена запись попадания для человека, даже если он не виден.

Выбор осуществляется примерно так, как описано в Руководство по программированию OpenGL : переключиться в режим визуализации GL_SELECT - glRenderMode (GL_SELECT) - визуализировать сцену, а затем проанализировать буфер выбора.Буфер глубины и проверка глубины включены, но GL, кажется, игнорирует настройки глубины в режиме GL_SELECT.

Возможно ли для OpenGL выполнять выборку глубины в режиме GL_SELECT?Есть ли другой способ отбрасывать записи попаданий для скрытых объектов без повторной реализации выделения другим методом?

Ответы [ 2 ]

3 голосов
/ 01 сентября 2010

Буфер выбора выдаст вам все объекты, которые соответствуют вашей позиции мыши, независимо от глубины от камеры.Вам решать, хотите ли вы найти самые близкие, самые дальние или все объекты.Помните, что мышь работает только в 2D-мире и пытается сделать выбор для 3D-пространства.Представьте себе луч, направленный в направлении -z по координате x, y, который вы щелкнули мышью.Все объекты, которые пересекают этот луч, возвращаются в буфер выбора.Похоже, вы хотите выбрать ближайший.

См. учебник Джерома и учебник Нехе по выбору.

0 голосов
/ 01 сентября 2010

Функция processHits из руководства по программированию OpenGL показывает, как получить значения z объекта в месте попадания. Используйте z-значение для сортировки объектов и выбора ближайших.

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