2015-08-08 3 views
0

Как можно смешивать ортографическую и перспективную проекцию в openGL? Некоторые 2d элементы должны быть нарисованы на экране (без масштабирования, вращения и т. Д.) Эти 2d-элементы имеют положение z, они должны появляться спереди/сзади других трехмерных элементов. Итак, я создал орографическую проекцию, нарисую все 2d-элементы, а затем настрою перспективную проекцию и нарисую все 3d-элементы. В результате все 2d элементы рисуются сверху. Похоже, что значения z из проекции orto и значения z из проекции перспективы несовместимы (GL_DEPTH_TEST).opengl смешанная перспектива и ортографическая проекция

Отдельно все 2d и все 3D-элементы работают нормально, проблема в том, когда я пытаюсь их смешивать. Изменяет ли предполагаемый прогноз значения z? В каком смысле? Можно ли использовать значения z от проекции или на проекцию, смешанные с значениями z, от перспективной проекции для теста глубины, или вся эта концепция ошибочна?

Голого opengl1.5

+0

Посмотрите на [этот вопрос] (http://stackoverflow.com/questions/31692210/a-depth-buffer-with-two-different-projection-matrices/). – derhass

ответ

0

Кажется, что Z значение от проекции орта и значение г от перспективной проекции не совместимы (GL_DEPTH_TEST).

Это действительно так. Перспективное преобразование отображает значения Z, нелинейные по отношению к значениям буфера глубины. Обычным способом решения этой проблемы является копирование буфера глубины после прохождения перспективы в текстуру глубины и использование этого в качестве дополнительного ввода в шейдере фрагмента орфографического рисунка, изменение нелинейности в глубине ввода и сравнение входящего Z координировать с этим; затем отбросьте надлежащим образом.

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

Смежные вопросы