OpenGL пользовательская навигация / выбор - PullRequest
0 голосов
/ 27 марта 2012

У меня есть ситуация, в которой я не совсем уверен, как справиться. У меня есть объект openGl около 20 тыс. Вершин, и мне нужно предложить пользователю возможность выбрать любую из этих вершин (скажем, с наименьшей возможной погрешностью). Теперь вот что я хочу сделать, чтобы сделать это:

Рядом с трехмерным холстом объекта я также предлагаю пользователю 3 «среза», выполненных плоскостями x = 0; y = 0 и z = 0. Скажем, для простейшего примера для сферы это были бы 3 круга, соответствующие «вырезанию» одного из измерений. Теперь давайте возьмем z = 0 для примера. Когда пользователь нажимает на точку, скажем (x_circle, y_circle), я хотел бы получить фактическую точку в трехмерном представлении, где он щелкнул. Конечно, z будет 0, но я не могу найти способ получить x и y. Я могу легко перевести это (x_circle, y_circle) -> (x_screen, y_screen), которое будет иметь тот же результат, что и щелчок по холсту в этих координатах, но мне нужно найти способ перевести это в координаты (x, y, 0) в 3D-виде.

То же самое должно быть сделано с x = 0, y = 0, но я думаю, что если я смогу понять / реализовать способ для z = 0, я могу просто применить более или менее то же решение с добавленным поворотом над чем-то , Если кто-то может помочь с какими-либо примерами / кодом или даже математикой за этим, это очень помогло бы, потому что в настоящий момент я не совсем уверен, как поступить.

1 Ответ

2 голосов
/ 28 марта 2012

Когда пользователь щелкает, вы можете визуализировать вершины, используя GL.POINTS (с определенным размером, если хотите), в экранный буфер, используя шейдер, который отображает индекс каждой вершины в RGBA.Затем вы читаете пиксель в позиции мыши и видите, какой это индекс.

...