преобразование 2D координат мыши в 3D пространство в OpenGL ES - PullRequest
2 голосов
/ 28 марта 2010

Я хочу преобразовать текущие координаты X и Y мыши в трехмерное пространство, которое я нарисовал в окне просмотра. Мне нужно сделать это на платформе OpenGL ES. Я нашел следующие возможные решения, реализованные в OpenGL, но ни одно из них не соответствует тому, что я ищу.

  1. Я нашел учебник NeHe по тому, как это сделать, но традиционным способом OpenGL. Он использует gluUnProject. http://nehe.gamedev.net/data/articles/article.asp?article=13 Хотя gluUnProject недоступен в OpenGL ES, его реализация кажется достаточно простой для переноса обратно. Но прежде чем вызвать его, нам нужно вызвать glReadPixels с GL_DEPTH_COMPONENT, а в OpenGL ES это невозможно. (Причина, которую я нашел в этой теме: http://www.khronos.org/message_boards/viewtopic.php?f=4&t=771)

  2. То, что я хочу сделать, похоже на выбор, за исключением того, что я не хочу выбирать объект, но мне нужны точные координаты, чтобы я мог распознать определенную часть объекта, которая в данный момент находится под курсором мыши. В этом ответе я прошел учебники по комплектации. https://stackoverflow.com/posts/2211312/revisions Но им нужен glRenderMode, который, как мне кажется, отсутствует в OpenGL ES.

Если вы знаете, как решить эту проблему в OpenGL ES, сообщите мне.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 28 марта 2010

Я думаю, что общее решение состоит в том, чтобы выяснить, где в мировом пространстве попадает нажатая координата, предполагая, что экран является плоскостью в мире (в местоположении камеры). Затем вы стреляете лучом, перпендикулярным плоскости, в вашу сцену.

Для этого требуется код "world-space", чтобы выяснить, с каким объектом (ами) пересекается луч; Решения, которые вы назвали неподходящими для OpenGL ES, основаны на изображениях, то есть зависят от пикселей, генерируемых при рендеринге сцены.

1 голос
/ 29 марта 2010

С OpenGL ES 2.0 вы можете использовать FBO и визуализировать значения глубины в текстуре. Очевидно, это было бы не совсем дешево (просто обойти ограничение glReadPixels) ...

Кроме того, поскольку - насколько я понимаю - вы хотите выбрать определенные части вашего объекта, возможно, вы захотите сделать что-то вроде выбора цвета , где каждая выбираемая часть объекта имеет уникальный цвет обратите внимание, что учебник Lighthouse 3D показывает только общую идею выбора цвета, ваша реализация, вероятно, будет отличаться). Вы могли бы немного оптимизировать, предварительно выполнив пересечение луча / ограничительной рамки и отобразив только подходящих кандидатов для текстуры, используемой для выбора.

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