Czy ktoś mógłby wyjaśnić, w jaki sposób możliwe byłoby utworzenie kuli wierzchołków, wskaźników i współrzędnych tekstury? Zaskakujący jest brak dokumentacji, jak to zrobić i to jest coś, czego jestem zainteresowany.
Próbowałem tego, co oczywiste, google, przeglądanie na gamedev.net itp. Jednak nic nie obejmuje generacji punktów kulistych, indeksowania ich i teksturowania.
rendering
geometry
procedural-generation
judeclarke
źródło
źródło
Odpowiedzi:
Istnieją dwa ogólne podejścia:
Najbardziej na lewo nazywa się kulę UV, a najbardziej na prawo - icosfera.
GLUT zwykle stosuje podejście UV: spójrz na funkcję
glutSolidSphere()
w kodzie źródłowym Freeglut .Oto doskonały artykuł na temat tworzenia icosfery: http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
To może być również interesujące: http://kiwi.atmos.colostate.edu/BUGS/geodesic/text.html opisuje podejście do organizowania twarzy w strefy.
http://vterrain.org/Textures/spherical.html daje doskonały opis tego, jak możesz je teksturować.
źródło
Można to zrobić na 2 sposoby:
Spaceruj theta i phi we współrzędnych sferycznych, generuj twarze i tris
Utwórz dwudziestościan i rekurencyjnie dziel twarze, aż do osiągnięcia żądanej teselacji.
Kula za pomocą kulistych współrzędnych chodzić
Po pierwsze, wystarczy użyć podwójnie zagnieżdżonego do chodzenia theta i phi. Idąc theta i phi, obracasz trójkąty, aby stworzyć swoją kulę.
Kod, który to robi, będzie wyglądał mniej więcej tak:
Pamiętaj więc, że ważne jest, aby nakręcić górną i dolną czapkę używając tylko tris, a nie quadów.
Kula dwudziestościenna
Aby użyć dwudziestościanu, wystarczy wygenerować punkty dwudziestościanu, a następnie nakręcić z niego trójkąty. Na wierzchołkach icosahedron siedzi przy pochodzenia są:
Następnie wystarczy spojrzeć na schemat dwudziestościanu i ścian wiatru z tych wierzchołków. Mam już kod, który to robi tutaj .
źródło
Jeśli punkty nie muszą być lokalnie jednorodne, ale powinny być globalnie jednolite i nie muszą być zgodne z żadnym ustalonym wzorem, możesz użyć wariantu algorytmu rzucania rzutkami, aby rozdzielić n punktów na kuli o promieniu r , średnio dist punktów od siebie. Wartości te są z grubsza następujące:
W najprostszym przypadku możesz następnie równomiernie wybierać punkty losowo, wybierając dwie równomiernie rozmieszczone zmienne u i v z (0, 1) i obliczając z nich współrzędne biegunowe zgodnie ze wzorami θ = 2 × π × u i ϕ = łuk cos (2 × v - 1); następnie odrzucając wszystkie punkty, które leżą zbyt blisko już wybranych punktów. Aby uzyskać nieco bardziej złożony i znacznie wydajniejszy algorytm, zobacz „ Rzucanie strzałkami po powierzchniach ” Cline, Jeschke, White, Razdan i Wonka.
Po wybraniu pierwszych czterech punktów (zakładając, że żadne trzy z nich nie są zdegenerowane , to znaczy - nie leżą w tym samym wielkim kole, ale jest to bardzo mało prawdopodobne), możesz utworzyć między nimi cztery twarze i za każdym razem dodawać nowy punkt, możesz podzielić twarz, do której należy, na trzy pod-ściany.
Dla celów teksturowania możesz następnie zmapować punkty na mapę sześcianu.
źródło