2013-03-13 4 views
0

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

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

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

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

EDIT:

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

+0

Вы искали это в Википедии? http://en.wikipedia.org/wiki/Z-buffering – acrilige

+0

да, но это было немного запутанно. Поэтому я знаю, что мой компонент «wz» - это глубина пикселя, но то, о чем я запутался, очевидно, что openGL имеет встроенное значение z-buffer, которое я могу сравнить с моим термином wz, но я не знаю, как получить доступ это начальное значение z. – user1782677

+0

Посмотрите обзор конвейера OpenGL, например здесь: http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization. На этой странице представлено описание глубины. На самом деле, это часть конвейера, которую вы можете отключить или нет, но вам не нужно делать этот тест глубины самостоятельно – acrilige

ответ

3

Тест глубины является частью конвейера 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) координаты, и решить, кто из них выиграет этот тест глубины ...

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