Jakiś czas temu zapytałem, jak ustalić, kiedy twarz nakłada się na inną. Porada polegała na użyciu bufora Z.
Nie mogę jednak użyć bufora Z w moim bieżącym projekcie i dlatego chciałbym użyć algorytmu malarza. Nie mam jednak pojęcia, kiedy powierzchnia jest za lub przed inną. Próbowałem wielu metod, ale wszystkie one zawodzą w przypadkach skrajnych lub zawodzą nawet w ogólnych przypadkach.
Oto lista metod sortowania, które próbowałem do tej pory:
- Odległość do punktu środkowego każdej twarzy
- Średnia odległość do każdego wierzchołka każdej twarzy
- Średnia wartość z każdego wierzchołka
- Najwyższa wartość z wierzchołków każdej powierzchni i narysuj je jako pierwsze
- Najniższa wartość z wierzchołków każdej powierzchni i narysuj je jako ostatnie
Problem polega na tym, że twarz może być bliżej, ale jest jeszcze dalej. Wszystkie te metody wydają się zawodne.
Edycja: Na przykład na poniższym obrazie powierzchnia z niebieskim punktem jako punktem środkowym jest pomalowana na powierzchni z czerwonym punktem jako punktem środkowym, ponieważ niebieski punkt jest bliżej. Wynika to jednak z faktu, że powierzchnia czerwonego punktu jest większa, a środek jest dalej. Powierzchnia z czerwonym punktem powinna być pomalowana na niebieską, ponieważ jest bliżej , podczas gdy odległość w środku wskazuje inaczej.
Czego dokładnie używa algorytm malarza, aby określić kolejność rysowania obiektów?