Буфер глубины OpenGL es 2.0 Read

Насколько я знаю, мы не можем считать Z (глубина) значение в OpenGL ES 2.0. Таким образом, я задаюсь вопросом, как мы можем получить 3D мировые координаты от точки на 2D экране?

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

Однако это приведет к 1 флэш-памяти кадра, так как colorbuffer является странным буфером, переведенным из буфера глубины. Я все еще задаюсь вопросом, существует ли некоторый стандартный способ получить глубину в OpenGL es 2.0?

Заранее спасибо!:)

6
задан Brian 7 April 2010 в 23:59
поделиться

1 ответ

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

Вы также можете спроецировать некоторые ключевые точки вашего объекта в 2D-пространство вашего экрана (я умножаю вашу 3D-точку на вашу матрицу преобразования), а затем выполнять 2D-сравнение (расстояние) с вашей точкой касания.

0
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: