2010-12-15 2 views
1

Что я хочу сделать, так это выбрать точку на экране, пролить луч через эту точку прямо по оси z и вернуть координаты x y z и нормали вершин первого треугольника, которые пересекает луч. Проблема в том, что я недостаточно разбираюсь в OpenGL, чтобы понять это. Я делал выбор на окнах OpenGL, используя разные цвета на заднем буфере, но ничего, что касалось отдельных треугольников.Как выбрать индивидуальный треугольник в OpenGL ES 1.1?

ответ

2

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

  1. Вам понадобится функция для проецирования координаты экрана в мировые координаты. На рабочем столе есть gluUnProject(), но на iPhone такой утилиты нет. Лично я использую порт iPhone той же функции, доступной от Mesa here. Возможно, вам придется настроить его.

  2. Вы можете использовать указанную выше функцию, чтобы получить две точки в мировом пространстве, которые представляют, где бесконечная линия позади вашего пикселя пересекает плоскость отсечения ближнего и дальнего конца. Используя этот вектор, вам придется перебирать треугольники в вашей сцене, принимая во внимание любые локальные преобразования и испытывать столкновения, используя алгоритм пересечения лучей, что само по себе может быть вопросом.

  3. Существует множество способов пересечения лучей с треугольником. Я рекомендую поездку в Википедию. Я скажу, что я использую что-то вроде следующего: во-первых, просто пересечь луч с плоскостью, содержащей треугольник. Затем проверьте, действительно ли точка пересечения находится внутри рассматриваемого треугольника. Если да, то все готово. Если нет, продолжайте идти.

+0

Спасибо, это похоже на то, что мне нужно. У меня есть «рендеринг в реальном времени», и в нем описываются некоторые способы сделать именно это. Я думаю, что я смогу ускорить процесс еще больше, проверив цвет касающейся части, а затем повторив только те модели, которые имеют этот цвет. – Davido

0

OpenGL ES 1.1 не имеет специальных функций выбора. Вы должны создать свою собственную систему, чтобы сделать это.

0

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