Есть несколько способов сделать это. Вероятно, наиболее практичными вариантами являются:
a) Используйте буфер трафарета, в который вы записываете при рендеринге модели, и glReadPixels(...), чтобы увидеть, установлен ли буфер трафарета для конкретной точки (x,y) на экране.
b) Преобразуйте точку (x,y) в линию в трехмерном пространстве из положения камеры. Затем выполните тест пересечения линий с вашей моделью (простым, но медленным способом будет тестирование каждого полигона, вы можете явно получить более быстрые результаты, используя ограничивающие объемы и т. д.)
c) Используйте glReadPixels(...) для чтения цвета точки (x,y) на экране. Очевидно, что это сработает только в том случае, если вы сможете точно определить, какие цвета являются частью модели, а какие нет.
Если вы можете настроить и использовать трафаретный буфер для этой цели, то а) будет, вероятно, самым простым в реализации. В противном случае b) является, вероятно, наиболее полезным общим решением.
person
mikera
schedule
10.02.2010