2017-02-21 3 views
1

Я довольно новичок в OpenGL и пытаюсь изобрести колесо (для удовольствия), создав свой собственный простой игровой движок, и теперь я пытаюсь сделать HUD с текстом. Для этого я программно создаю текстурные карты шрифтов для шейдера фрагментов, которые можно использовать для текстурных квадроциклов, насколько я понимаю, это обычный подход?Укладка частично прозрачных текстур шрифтов нарушается путем изменения порядка рендеринга

Это работает в основном хорошо, текст появляется на экране с прозрачным фоном позволяет видеть все, что находится позади него, как и ожидалось (рис. 1)

Если я затем добавить еще один текстовый сетки в той же области, первый, но с более высоким z-индексом (ближе к камере) он отображает верхнюю часть предыдущего текста и смесей (правильное использование?) ожидаемым образом (рис.2)

Однако, если я тогда отмените z-индекс - так, чтобы первая строка (розовая) была ближе к камере (но порядок визуализации не изменился), я вижу эффект на рис. 3, где, хотя текстовый фон по-прежнему прозрачен, кажется, он переписал другой текст, а не смешивался с ним.

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

Другими словами, почему он правильно смешивается, только если порядок z-индексов соответствует порядку визуализации? Моя гипотеза заключается в том, что если я попытаюсь сделать что-то «за» квадратом с частично прозрачным фоном, я должен сделать его первым, а другой - глубже. Является ли это основным правилом рендеринга графики, к которому я должен привыкнуть? Нужно ли мне просто отслеживать порядок укладки и обеспечить рендеринг элементов в правильном порядке?

render order affects blending

ответ

2

Хотя вы можете быть в состоянии смотреть через прозрачные части текстуры, OpenGL не может. Когда он смешивает цвет, он по-прежнему устанавливает буфер глубины в определенное значение, а когда вы хотите что-то сделать за ним, он становится препятствуемым невидимыми частями.

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

+1

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

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