Odpowiedzi:
Odpowiedź lhf jest dobra z punktu widzenia teselacji, ale mogą one wystąpić w przypadku prostszych przypadków użycia siatki trójkąta.
Weźmy ten trywialny przykład trzech trójkątów w przestrzeni ekranu , ABC, ADE i DBE ...
Chociaż punkt E, matematycznie, miał być dokładnie na odcinku linii AB, rurociąg nie będzie wykorzystywał w pełni dokładnych wartości, takich jak liczby wymierne (np. Https://gmplib.org/ ). Zamiast tego prawdopodobnie będzie używać liczb zmiennoprzecinkowych, więc zostanie wprowadzone pewne przybliżenie / błąd. Prawdopodobnie wynikiem będzie coś takiego:
Zauważ, że wszystkie wierzchołki mogą mieć niedokładności. Chociaż powyższy przykład pokazuje pęknięcie, złącze T może zamiast tego powodować nakładanie się wzdłuż krawędzi, powodując dwukrotne narysowanie pikseli. Może to nie wydawać się tak złe, ale może powodować problemy z przezroczystością lub operacjami matrycy.
Można by pomyśleć, że przy zmiennoprzecinkowym wprowadzony błąd będzie nieznaczny, ale w rendererze wartości wierzchołków przestrzeni ekranu (X, Y) są prawie zawsze reprezentowane przez liczby stałoprzecinkowe, a zatem przemieszczenie z idealnej lokalizacji będzie zwykle są znacznie większe. Ponadto, ponieważ sprzęt do renderowania „interpoluje” segment linii piksel po pikselu z własną wewnętrzną precyzją, istnieje jeszcze większa szansa, że odejdzie on od zaokrąglonej lokalizacji E.
Jeśli trójnik zostanie „usunięty” przez, powiedzmy, również podzielenie trójkąta ABC na dwa, tj. AEC i EBC, problem zniknie, ponieważ przesunięcia wprowadzone przez błędy będą spójne.
Teraz możesz zapytać, dlaczego rendery (szczególnie HW) używają matematyki stałoprzecinkowej dla współrzędnych XY wierzchołka? Dlaczego nie używają liczb zmiennoprzecinkowych w celu zmniejszenia problemu? Chociaż niektórzy to zrobili (np. Dreamcast Segi), może to prowadzić do innego problemu, w którym matematyka konfiguracji trójkątów staje się katastrofalnie niedokładna, szczególnie w przypadku długich cienkich trójkątów i zmieniają rozmiar w nieprzyjemny sposób.
Podczas modelowania powierzchni parametrycznych z siatką w dziedzinie parametrów, złącza T najprawdopodobniej pojawią się jako nieciągłości na powierzchni. Pojawią się one jako przerwy w renderowaniu. Patrz poniżej.
Mówiąc bardziej ogólnie, połączenia T w siatkach trójkątów prawdopodobnie spowodują nieciągłości interpolowanych atrybutów, takich jak kolor i normalne.
Błąd zaokrąglenia zmiennoprzecinkowego.
Po przekształceniu skrzyżowania T punkt w T może zostać zaokrąglony od krawędzi.
Wtedy może się zdarzyć, że fragment, który jest próbkowany dla piksela, leży w szczelinie między 2 powierzchniami.
Można to naprawić, nie mając trójnika.
Prostym sposobem na uniknięcie tego jest upewnienie się, że wszystkie wierzchołki są zespawane
Problem polega na tym, że masz cięcia wzdłuż krawędzi z wierzchołkiem, ale nie masz odpowiedniego wierzchołka na sąsiedniej krawędzi do spawania / łączenia go, jeśli myślisz o tym jak o guziku na koszuli, zasiałeś przycisk do krawędzi, ale nie dał mu dziury, więc materiał jest otwarty.
Na poniższym rysunku czerwone kropki reprezentują prawidłowo zespawane wierzchołki, wszystkie niebieskie kropki potrzebują dodatkowego wierzchołka, aby wyciąć je na sąsiedniej krawędzi.
Ogólnie rzecz biorąc, dobrą praktyką jest utrzymywanie modelowania w quadach i triach, pomaga to złagodzić ten problem, ponieważ zawsze powinieneś mieć odpowiedni wierzchołek do spawania. Pomaga także trzymać się quadów, jeśli planujesz używać jakichkolwiek metod podziału na siatce.