проходящий буфер глубины

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

По сути, он говорит, что сначала мне нужно взять трехмерную вершину сетки и преобразовать ее в координаты окна wx, wy, wz, где wz — глубина. Эту часть я сделал.

Затем я должен проверить, «проходит» ли эта координата окна буфер глубины или нет.

Это все, что он говорит, и я не уверен, что имеется в виду под «передачей» буфера глубины. Кто-нибудь здесь знает, что это может означать и как я могу реализовать это в openGL?

РЕДАКТИРОВАТЬ:

В частности, мне нужно, чтобы openGL давал мне обратную связь относительно того, прошла ли конкретная вершина буфер глубины. На самом деле я не визуализирую эти вершины, поэтому мне не выгодно, если openGL выполняет все вычисления «за кулисами».


person user1782677    schedule 13.03.2013    source источник
comment
Вы искали это в википедии? en.wikipedia.org/wiki/Z-buffering   -  person acrilige    schedule 13.03.2013
comment
да, но это было немного запутанно. Итак, я знаю, что мой компонент «wz» - это глубина пикселя, но меня смущает то, что, по-видимому, openGL имеет встроенное значение z-буфера, с которым я также могу сравнить свой термин wz, но я не знаю, как получить доступ это начальное значение z.   -  person user1782677    schedule 13.03.2013
comment
Посмотрите обзор конвейера OpenGL, например здесь: opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization на этой странице есть описание теста глубины. На самом деле, это часть пайплайна, которую вы можете отключить или нет, но вам не нужно делать этот тест на глубину самостоятельно.   -  person acrilige    schedule 13.03.2013
comment
На самом деле мне не нужно визуализировать вершину, мне просто нужно знать, проходит ли она тест глубины, чтобы я мог делать другие вещи с прошедшими проверку вершинами.   -  person user1782677    schedule 13.03.2013
comment
какие вещи, например?   -  person acrilige    schedule 13.03.2013
comment
Я просто использую вершины для вычисления другого алгоритма, но на самом деле не имеет значения, что это за алгоритм на самом деле, он работает только в том случае, если вершины, которые я передаю в него, передают буфер глубины.   -  person user1782677    schedule 13.03.2013
comment
Итак, ваш вопрос о том, как получить обратную связь от конвейера opengl о том, что ваша вершина прошла тест глубины? Если это так, добавьте это к своему вопросу, потому что это немного сложно понять...   -  person acrilige    schedule 13.03.2013
comment
да точно, мне нужна какая-то обратная связь от openGL   -  person user1782677    schedule 13.03.2013
comment
давайте продолжим это обсуждение в чате   -  person acrilige    schedule 13.03.2013


Ответы (1)


Тест глубины — это часть пайплайна OpenGL, которая должна запускаться после фрагментного (пиксельного) шейдера. Таким образом, вам не нужно делать это самостоятельно, все, что вам нужно сделать, это правильно инициализировать матрицу проекции и область просмотра, чтобы ваш Wz для каждой вершины был рассчитан, а затем интерполирован по вершинам. Вы можете настроить некоторые свойства этого теста.

Вот обзор конвейера OpenGL: http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization См. главу 7: Обработка отдельных образцов

The depth test, if any, is performed; if it fails, then the fragment is culled and not added to the framebuffer.


Вы сказали, что должны знать, какая из вершин прошла тест на глубину. Но проверка глубины вызывается только для фрагментов, а не для вершин. Итак, если у вас уже есть вершины с оконными координатами x, y и z, то вы можете просто проверить координаты z у тех, у кого такие же (x, y) координаты, и решить, кто из них выиграет этот тест на глубину...

person acrilige    schedule 13.03.2013