Порядок отрисовки в OpenGL

Я визуализирую сцену OpenGL, содержащую растровый текст. Насколько я понимаю, порядок, в котором я рисую вещи, будет определять, какие элементы будут сверху.

Однако мой растровый текст, хоть я и рисую его последним, не сверху!

Например, я рисую:

1) Фон
2) Кнопки
3) Текст

Все на той же глубине z. Кнопки находятся над фоном, но текст невидим. Если я изменяю глубину текста по оси z, я ее вижу, но тогда у меня возникают другие проблемы.

Я использую метод растрового текста из учебных пособий Нехе.

Как я могу сделать текст видимым без изменения глубины z?


person Evan Marks    schedule 22.12.2008    source источник


Ответы (2)


Вы можете просто отключить z-тест через

  glDisable (GL_DEPTH_TEST);  // or something related..

Если вы сделаете это, Z ваших текстовых примитивов будет проигнорирован. Примитивы отрисовываются в том же порядке, в котором вы вызываете gl-функции.

Другим способом было бы установить какое-то постоянное z-смещение через glPolygonOffset (не рекомендуется) или установить режим сравнения глубины на что-то вроде GL_LESS_EQUAL (равноценность является важным). Это гарантирует, что примитивы, нарисованные с одинаковой глубиной, отображаются друг над другом.

Надеюсь, это поможет.

person Nils Pipenbrinck    schedule 22.12.2008
comment
Да, отключите z-буферизацию для рисования пользовательского интерфейса. - person Chris Blackwell; 22.12.2008
comment
Хороший ответ - я собирался предложить все то же самое! :) - person Drew Hall; 22.12.2008

Вы также можете использовать glDepthFunc (GL_ALWAYS).

person Razzupaltuff    schedule 29.12.2008
comment
Если вы проголосуете за этот ответ, объясните, что в нем не так. - person Razzupaltuff; 10.09.2009