Почему соседние треугольники никогда не перекрываются при растеризации?


11

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

Когда я рендерил простой выровненный по оси четырехугольник, состоящий из двух треугольников, я не понимаю, почему на диагональном ребре, где встречаются эти треугольники, никогда не бывает видимых артефактов. Некоторые из этих пикселей должны быть в обоих треугольниках, верно? Так что, если мой fragshader всегда испускает частично прозрачный цвет - скажем, 50% черного - тогда не должно ли быть видимой темной диагональной линии в получающемся квадрате?

Очевидно, это здорово, что это не настоящая проблема, которую нужно кодировать, я просто не понимаю, почему это не так. Какое волшебство GPU делает это всегда работать?

Ответы:


10

Это та же проблема, которая обсуждалась в разделе « Что такое пробелы в выборке во время преобразования сканирования»?

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

Если точка выборки лежит точно на ребре, то вступают в игру дополнительные правила разрыва связи, часто называемые «правилами заполнения». Обычно это будет что-то, эквивалентное, скажем, только тому, что точки ребра на верхнем / левом ** ребрах треугольника находятся "внутри".

** Другие правила доступны ;-)


Да, я просто искал этот ответ
joojaa

1
Соответствующий отрывок из Черной книги: jagregory.com/abrash-black-book/…
bblack

Очень большое спасибо! Теперь это вроде как имеет смысл, и эта черная книга тоже выглядит большим ресурсом
Рувим Скрэттон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.