Sposobem na wygenerowanie krawędzi i powierzchni prymitywnego kształtu, takiego jak pudełko, stożek i wszystkie te, które zacytowałeś, jest wygenerowanie ich w tym samym czasie, gdy tworzysz wierzchołki. W rzeczywistości należy tworzyć wierzchołki w logiczny sposób, który ułatwia odpowiednie obliczenie krawędzi i ścian.
Istnieją algorytmy, które przyjmują jako dane wejściowe zbiór punktów w przestrzeni i obliczają nad nim tak zwaną „ triangulację zbioru punktów ”, ale problem triangulacji zbioru punktów jest NP-kompletny , dzięki czemu szybciej jest tworzyć krawędzie i ściany w miarę upływu czasu niż po prostu obliczać wierzchołki i pozwolić algorytmowi zadziałać. Informuję tylko, że istnieje takie rozwiązanie.
Oprócz tego nieefektywnego rozwiązania, myślę, że możesz traktować prymitywy tylko dla poszczególnych przypadków, jak w poniższych przykładach.
Siatka to wierzchołki i ściany . Krawędzie są zawarte w opisie ścian, chyba że siatka zawiera linie, które nie tworzą ścian. Wierzchołki są krotkami 3 współrzędnych zmiennoprzecinkowych. Krawędzie są po prostu parami odniesień do wierzchołków, ale z pewnością nie będziesz ich potrzebować. Powiedz na przykład, że twoje wierzchołki są w indeksowanej tablicy. Cóż, twoje krawędzie mogą być wtedy parami wskaźników z tej tablicy. Twarze są trojaczkami odniesień do wierzchołków lub trojaczkami indeksów w przypadku tablicy indeksowanej .
Powinieneś być w stanie policzyć wierzchołki, krawędzie i ściany, które składają się na każdy z tych prymitywnych kształtów, ponieważ możliwość ich policzenia oznacza zrozumienie właściwości obiektu, co pomaga ci opracować metodę, w której je zbudujesz, używając pętli i inne narzędzia, jak zobaczymy.
Stożek
W przypadku stożka z n + 2 wierzchołkami, krawędziami 3n i powierzchniami 2n :
- Zrób dwa osobne wierzchołki.
- Zrób okrąg wokół jednego z wierzchołków (wierzchołka podstawowego), który znajduje się w płaszczyźnie prostopadłej do odcinka między dwoma pierwszymi wierzchołkami. Mam nadzieję, że możesz zrobić koło za pomocą trygonometrii, prawda? To już wszystkie wierzchołki stożka. To także jedna trzecia wszystkich krawędzi ( w okręgu jest n krawędzi w sumie 3n ).
- Zrób n krawędzi od wierzchołka podstawowego do n wierzchołków w okręgu. Możesz zrobić połowę twarzy (to znaczy n twarzy).
- Zrób n krawędzi od wierzchołka wierzchołka do n wierzchołków w okręgu. Możesz zrobić drugą połowę twarzy (to n twarzy).
1)
2)
3)
4)
Wynik końcowy:
Możesz także tworzyć krawędzie i ściany podczas uruchamiania pętli tworzącej okrąg. Ta sama złożoność, ta sama rzecz. Zrób jeden wierzchołek na kole, zapisz go w tablicy wierzchołków, dodaj odpowiednią krawędź (parę indeksów) do tablicy par indeksów, jeśli masz na to ochotę, i na koniec dodaj odpowiednią powierzchnię do twojej tablicy trojaczków indeksów . Przejdź do następnego wierzchołka.
Cylinder i rura: nie robienie tej samej pracy dwa razy i quady
Ponownie, dla rury zaczyna się ona wierzchołkiem i okręgiem, który będzie środkiem albo górnej, albo dolnej tarczy cylindra:
- Zrób wierzchołek.
- Zrób okrąg wokół wierzchołka. Dodaj krawędzie (jeśli chcesz krawędzie) między kolejnymi wierzchołkami okręgu oraz między środkowym wierzchołkiem a każdym wierzchołkiem okręgu. Dodaj twarze między każdą triolą wierzchołków wykonanych ze środkowego wierzchołka i dwoma kolejnymi wierzchołkami na okręgu.
- Powiel wszystko, przełóż kopię w kierunku prostopadłym do właśnie wykonanej podstawy, o długość żądanego cylindra.
- Połącz górę i dół.
Aby połączyć górę i dół, musisz utworzyć poczwórne pary par naprzeciw siebie wierzchołków. Więc pomyśl przed siebie i dlaczego nie uczynisz się funkcją, która tworzy dwie trójkątne twarze z czterech wierzchołków?
Gotowy. Zauważ, że tym razem wykorzystujemy fakt, że ta sama struktura (okrąg + środek) pojawia się dwa razy w cylindrze, aby uzyskać skrót. Nie musimy robić wszystkiego ręcznie wierzchołków, krawędzi i powierzchni, w przeciwieństwie do stożka, gdzie było to konieczne.
Zgodnie z tą zasadą lenistwa można również zrobić jedną czwartą okręgu i powielić go, i ponownie zrobić pełne koło z bardzo prostymi przekształceniami (ważne dla dowolnego koła, tak jak ze stożkiem), ale to naprawdę przesada dla niezbyt skomplikowany kształt.
Zawsze musisz używać właściwości geometrycznych tworzonych obiektów, aby uprościć ich tworzenie . Mianowicie, ich symetrie i niezmienniki .
W przypadku walca po prostu nie twórz bazowego wierzchołka, po prostu utwórz okrąg, powielić, przetłumaczyć kopię, zrobić quady, gotowe.
Kula i kapsułka: dodając złożoności, wciąż nie ta sama praca dwa razy
Aby stworzyć kapsułkę, chcemy stworzyć kulę UV, podzielić ją na dwie połowy, przetłumaczyć pierwszą połowę, a następnie połączyć obie z bokami kapsułek.
Ponownie możliwe jest utworzenie tylko jednej ósmej (!!) kuli, a następnie zduplikowanie jej i odwrócenie, a następnie zduplikowanie i odwrócenie wyniku, z wyjątkiem innej osi itp., Aby uzyskać pełną kulę, w 4 krokach (utwórz ósmy , zduplikuj i odwróć trzy razy). Może przesada, ale mniej niż w przypadku koła.
Prosta kula UV:
W rzeczywistości wykonujemy tylko jedną połowę (na przykład), kopiujemy tę połowę, odwracamy kopię do góry nogami i tłumaczymy ją długością kapsułki:
Łączymy górną i dolną połowę:
Prawdziwa (nieco) ciężka praca pochodzi z trygonometrii, która polega na tworzeniu kuli. Zbiór wszystkich wierzchołków należących do kuli UV można opisać jako zbiór wszystkich punktów formy:
gdzie R jest promieniem kuli i dla pewnej dodatniej liczby całkowitej N mamy stałą
θ = × π / N ,
k i n są liczbami całkowitymi z k zmieniającym się od 0 do 2N-1 oraz n zmieniającym się od -N / 2 do + N / 2 .
Aby stworzyć półkulę lub Ósmy sfery, musisz ograniczyć zbiór wartości przyjmowanych przez k i n .
Gdyby k było liczbami rzeczywistymi, a nie tylko liczbami całkowitymi, dostałbyś całą kulę, a nie tylko wierzchołki na jej powierzchni. Więc to, co tutaj zrobiliśmy, to rasteryzacja równania powierzchni pierwotnej .
Przerażający torus : po tym wszystkim, co widzieliśmy, jest łatwy!
Ponownie, więcej trygonometrii, więcej wierzchołków, więcej quadów, więcej symetrii, więcej niezmienników ... więcej geometrii! Znajdź równanie dla powierzchni torusa, „rasteryzuj go poprawnie”, uprość problem, używając (oczywistych) symetrii torusa, a na koniec zapętl się przez zestaw właśnie zdefiniowanych wierzchołków i twórz krawędzie i twarze podczas udać się!
Widzieć? Całkowicie proste.