Где я щелкнул с OpenGL? - PullRequest
2 голосов
/ 25 июля 2011

Я программирую в Xcode / OpenGL, и у меня на экране отображаются некоторые 3D-объекты.Есть ли способ, которым я могу получить в OpenGL 3D местоположение / вершину / лицо, на которое я нажал?

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Обычный способ сделать это - вызвать gluUnProject дважды, с вашими координатами x и y в обоих случаях и znear в одном, а zfar в другом случае.

Это дает вам две точки, через которые проходит луч. Ваш щелчок мыши находится на этом луче.

Теперь сталкивайте объекты (сначала ограничивающие объемы, затем по треугольнику, если хотите, или параметрически, если это возможно) с этим лучом. Ближайший хит - тот, который вам нужен.

Другая возможность будет считывать обратно значение z-буфера (glReadPixels). Это должно быть сделано с помощью пиксельного буферного объекта и распределено по нескольким кадрам (или это будет очень неприятный трюк в вашем конвейере). Это даст вам трехмерную координату, для которой вы можете найти ближайший объект.

Или вы можете использовать окклюзионные запросы (перерисовка окна просмотра 1x1 с отключенной записью цвета) для того же эффекта.

Наконец, есть, конечно, режим выбора , но это устаревшая функциональность, поэтому вы, вероятно, не захотите его использовать.

2 голосов
/ 25 июля 2011

Другой способ сделать это, если у вас все в порядке с использованием чего-то, что устарело в новых версиях opengl, - это использовать буфер выбора / режим выбора: http://www.lighthouse3d.com/opengl/picking/

...