Biorąc pod uwagę listę indeksów trójkątów, jak dokładnie można przekonwertować ją na listę indeksów z przyleganiem modułu cieniującego geometrię?
Zauważ, że ściśle mówimy tutaj o indeksach - wierzchołki są obecne, ale skupimy się wyłącznie na indeksach, ponieważ możemy ich użyć do dopasowania zduplikowanych wierzchołków bez konieczności przechodzenia do porównań zmiennoprzecinkowych i epsilonów - ta praca ma już zrobione.
Wiem, że dla każdego trójkąta na liście indeksy {0, 1}, {1, 2} i {2, 0} (lub {n, n + 1}, {n + 1, n + 2}, { n + 2, n} jeśli wolisz) z jego krawędzi; lista indeksów jest dobrze uformowana i prawidłowo przestrzega kolejności nawijania.
Wiem, że dla każdej takiej krawędzi możemy przeszukać całą listę pod kątem innego trójkąta, który wykorzystuje dwa z tych indeksów, a trzeci indeks tego trójkąta służy do wypełnienia sąsiedniego trójkąta dla tej krawędzi.
Wiem, że na liście sąsiadów każdy oryginalny trójkąt jest reprezentowany przez 6 indeksów, oryginalne indeksy przechodzą w przedziały 0, 2, 4; nowe wskaźniki uzupełniające dopasowanie znajdują się w polach 1, 3, 5. Indeks do uzupełnienia dla krawędzi {0, 1} trafia do boksu 1, indeks do uzupełnienia dla krawędzi {1, 2} idzie do boksu 3, indeks do wykonania dla krawędzi {2, 1} przechodzi do pola 5.
Co próbowałem?
Próbowałem brutalnego wymuszania, i tak, to zadziała, ale mam bardziej eleganckie podejście.
Próbowałem konstruktora list krawędzi Erica Lengyela, ale (1) wydaje się, że nie przestrzega oryginalnej kolejności trójkątów, (2) wydaje się, że nie przestrzega kolejności uzwojenia, (3) jest tak jasne, jak błoto, gdzie iść następnie po zbudowaniu listy krawędzi i (4) podejrzewam, że przykładowy kod zawiera tak oczywiste błędy rażące, jak „triangleIndex” kontra „faceIndex” - czy autor nawet skompilował kod, nie wspominając o uruchomieniu go, aby zweryfikować to?
Więc - jakieś sugestie lub wskazówki odtąd?