Pourquoi les triangles adjacents ne se chevauchent-ils jamais lorsqu'ils sont tramés?

11

Toutes mes excuses pour la question noob suivante, c'est juste que je ne trouve nulle part une réponse satisfaisante ...

Lorsque je rend un simple quadrilatère aligné sur l'axe composé de deux triangles, je ne comprends pas pourquoi il n'y a jamais d'artefacts visibles sur le bord diagonal où ces triangles se rencontrent. Certains de ces pixels doivent être dans les deux triangles, non? Donc, si mon fragshader émet toujours une couleur partiellement transparente - 50% de noir par exemple - ne devrait-il pas y avoir une ligne diagonale sombre visible dans le quadruple résultant?

Évidemment, c'est formidable que ce ne soit pas un vrai problème qui doit être codé, je ne comprends tout simplement pas pourquoi ce n'est pas le cas. Quelle est la magie du GPU qui fait que cela fonctionne toujours?

Reuben Scratton
la source

Réponses:

10

Il s'agit du même problème que celui décrit dans Quels sont les écarts d'échantillon lors de la conversion de numérisation?

En bref, la pixellisation - au moins avec la majorité des systèmes matériels - teste à un seul point «infinitésimal» pour chaque pixel pour déterminer si ce pixel est à l'intérieur d'un triangle donné.

Si le point d'échantillonnage se trouve exactement sur une arête, des règles de bris d'égalité supplémentaires, souvent appelées «règles de remplissage», entrent en jeu. En règle générale, cela équivaudra, disons, à ne considérer que les points de bord sur les bords supérieur / gauche ** d'un triangle comme étant "à l'intérieur".

** D'autres règles sont disponibles ;-)

Simon F
la source
Ouais je cherchais juste cette réponse
joojaa
1
Passage pertinent du Black Book: jagregory.com/abrash-black-book/…
bblack
Merci beaucoup! Cela a un peu un sens maintenant, et ce livre noir ressemble aussi à une excellente ressource
Reuben Scratton