Смешивание GL_ALWAYS с GL_LESS в OpenGl - PullRequest
0 голосов
/ 03 октября 2018

У меня есть:

  1. набор точек
  2. набор сеток

мне нужно

  1. сетки должны быть нарисованы в правильном z-порядке, основанном на глубине.Для этого я использовал glDepthFunc(GL_LESS) или glDepthFunc(GL_LEQUAL), или glEnable(GL_DEPTH_TEST)
  2. точки, которые будут отображаться в порядке рисования, игнорируя глубину.Для этого я использовал glDepthFunc(GL_ALWAYS) или glDisable(GL_DEPTH_TEST).Они нарисованы с использованием GL_POINTS и glVertex3d
  3. сеток, которые должны отображаться, как если бы точки были на правильной глубине.

Рис.1 показывает точки в квадрате по отношению к сеткам, когда рассматривается глубина.На рис. 2 показано, как выглядит, когда точки отображаются без учета глубины (поэтому красные точки появляются поверх синих точек независимо от их глубины), но сетки всегда находятся за точками, независимо от глубины.Я бы хотел, чтобы сетки находились в том же отношении, что и точки, как на рис. 1, но точки должны быть в том же отношении друг к другу, что и на рис. 2.

enter image description here

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

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

В: Возможно ли это, и если да, то как я могу это сделать?

1 Ответ

0 голосов
/ 04 октября 2018

Как сказал в комментариях Михаил Настенко, для достижения эффекта необходимо нарисовать сетки, затем отключить глубину , написание , выключить , затем нарисовать «точки» (с глубиной тест еще включен).Очевидно, что вам придется снова включить запись глубины перед рисованием следующего кадра.

Отключая запись глубины (с помощью glDepthMask(GL_FALSE)), вы гарантируете, что «точки» не записывают свою глубинув буфер глубины.Таким образом, каждая «точка» проверяется только по глубине сцены, прежде чем вы начнете рисовать «точки».Если две «точки» перекрываются, то они будут нарисованы в порядке рендеринга.

...