Projektuję grę częściowo złożoną z eksploracji planet. Chcę dla nich użyć pseudolosowego generowania, regenerując się od określonego ziarna, gdy muszę je załadować, zamiast przechowywać każdy szczegół, który byłby zbyt ciężki. Tak więc po prostu zapiszę w pliku losowe ziarno i ewentualne modyfikacje wykonane przez gracza.
Gracz musi widzieć planetę z orbity (z bardzo niskim poziomem detali, a następnie zejść na ziemię, powoli zwiększając poziom szczegółów regionu, w którym ląduje, i rozładowując te po drugiej stronie planety, które wychodzą poza pole widzenia gracza.
Gdybym musiał to zrobić na płaskim terenie, zrobiłbym to z łatwością za pomocą kwadratowego systemu fragmentów. Problem polega jednak na tym, że planety są - prawie - sferami.
Więc jaki byłby najlepszy sposób na załadowanie detali naziemnych (reliefu i uziemionych obiektów) wokół precyzyjnego punktu?
Myślałem już o dwóch rozwiązaniach, ale oba mają słabą stronę:
1. Cięcie kuli w kwadratowe kawałki.
Gdy gracz znajdzie się wystarczająco blisko ziemi, muszę tylko poprawić szczegóły najbliższych pól z jego / jej pozycji.
Jeśli to nie wystarczy, wciąż mogę wycinać każdy kwadrat na kwadraty, aby załadować je, gdy gracze znajdują się na ziemi lub naprawdę blisko niej.
Ale jak widać na zdjęciu, problem polega na tym, że gracz próbuje wylądować na słupie: kwadraty stają się bardzo cienkimi prostokątami, a nawet trójkątami dla ostatniej linii, a dodatkowo fakt, że będzie ich wiele do załadowania, generacja wydawałaby się zniekształcona.
2. Zaczynając od dwudziestościanu.
Tutaj mogę po prostu zwiększyć teselację trójkąta wokół pozycji gracza, gdy on / ona się zbliża.
Ale nie wiem, jak zlokalizować trójkąty blisko pozycji gracza. Słyszałem, że w tym przypadku przydatne mogą być współrzędne kartezjańskie , ale nie wiem, jak ich używać.
Używam do tego C ++ / OpenGL, więc najważniejsze do wygenerowania i załadowania tutaj są wierzchołki reprezentujące relief powierzchni i kolor / teksturę.