Отбор лица

  1. Порядок намотки
  2. мозаика
  3. Выбраковка

OpenGL рендеринг конвейер

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

Порядок намотки

Когда пользователь выдает Команда рисования вершины, обработанные Рендеринг Трубопровод обрабатываются в порядке, предусмотренном Спецификация вершины , Геометрический шейдер может изменить порядок, но даже тогда вершины, созданные каждым вызовом GS, упорядочены относительно других вершин. Шейдер оценки тесселяции может напрямую контролировать порядок вершин в мозаичном патче используя специальные опции ,

Когда вершины разбиты на Примитивы в течение Примитивная Ассамблея порядок вершин относительно других в примитиве отмечен. Порядок вершин в треугольнике в сочетании с их визуальной ориентацией можно использовать для определения того, виден ли треугольник с «передней» или «задней» стороны.

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

Какая сторона считается "лицевой", контролируется этой функцией:

Это глобальное состояние. режим может быть GL_CW или GL_CCW, что означает, что по часовой стрелке или против часовой стрелки находится спереди, соответственно. На только что созданный OpenGL Context , лицевой стороной по умолчанию является GL_CCW.

Фрагмент шейдера получает встроенное входное значение, указывающее, был ли фрагмент сгенерирован лицевой стороной треугольника (это всегда будет верно для нетреугольных примитивов).

мозаика

Порядок намотки абстрактных вершин патча, генерируемых во время мозаика контролируется Шейдер оценки тесселяции , Это опция макета, указанная TES, а не значение времени выполнения. Порядок намотки указывается в направлении: cw и cww. То, что считается "фронтом", по-прежнему определяется glFrontFace ,

Обратите внимание, что окончательный порядок намотки любых сгенерированных треугольников определяется позициями, выводимыми из TES (или последующих Геометрический шейдер ). Таким образом, даже если спецификация порядка намотки в TES является фиксированным значением для шейдера, это не означает, что все сгенерированные треугольники будут иметь эту намотку после того, как TES создаст для них позиции. Указанный порядок только для абстрактного патча; TES решает, что это означает в генерируемых объектах.

Выбраковка

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

Рассмотрим куб; это сделано из 12 треугольников, но 6 из них будут направлены в противоположном направлении от другого 6. Если куб не прозрачен, 6 из треугольников всегда будут покрыты другим 6. Действительно, в зависимости от проекции, можно покрыть более 6 треугольников; представьте себе куб, если смотреть спереди очень близко к камере. Ракурс означает, что даже стороны направлены в сторону от камеры.

Отбор лица позволяет удалять невидимые треугольники закрытых поверхностей перед дорогой растеризации а также Фрагмент шейдера операции.

Чтобы активировать выборку лица, необходимо сначала включить GL_CULL_FACE с помощью glEnable , По умолчанию выбор лица отключен. Чтобы выбрать, какая сторона будет отбракована, используйте следующую функцию:

режим может быть установлен в GL_FRONT, GL_BACK или GL_FRONT_AND_BACK. Последний отбросит все треугольники. Это отличается от glEnable (GL_RASTERIZER_DISCARD) , так как последний отключит все Примитивы при отбраковке обеих граней отбраковываются только треугольники (поскольку только у них есть грани).

По умолчанию GL_BACK является гранью, которую нужно отбраковать.