Obecnie pracuję nad generatorem proceduralnych planet OpenGL. Mam nadzieję, że użyję go do kosmicznej gry RPG, która nie pozwoli graczom zejść na powierzchnię planety, więc zignorowałem wszystko, co jest związane z ROAM. W tej chwili rysuję sześcian z VBO i mapuję na kulę.
Znam większość technik generowania mapy wysokości fraktalnej i zaimplementowałem już własną wersję przesunięcia punktu środkowego (nie tak przydatne w tym przypadku wiem).
Moje pytanie brzmi: jaki jest najlepszy sposób na procedurę generowania mapy wysokości. Mam spojrzał na libnoise który pozwala mi zrobić tilable heightmaps / tekstur, ale o ile widzę, że muszę wygenerować siatkę jak ten .
Pozostawienie kafelków oczywiste.
Czy ktoś mógłby mi doradzić, jak wybrać najlepszą drogę?
Wszelkie uwagi będą mile widziane.
źródło
Mapowanie wysokości przesunięcia punktu środkowego jest dobrym miejscem do rozpoczęcia. OP, dlaczego według ciebie tak nie jest?
OP dobrze jest modelować powierzchnię planety jako mapę sześcienną, ponieważ każda płaska mapa (np. Rzut mercatora) będzie miała zniekształcenia, które są brzydkie i skomplikowane pod względem matematycznym.
Gdybym był OP, na początku zapomniałbym geometrii planety na dużą skalę. Zrobiłbym mapę sześcienną, w której każda twarz ma 2 ** N + 1 pikseli (2,3,5,9,17,33 ...), a każdy texel koduje wysokość [0..N), gdzie 0 jest wysokością oczekiwany najniższy wykop, a N jest wysokością oczekiwanej najwyższej góry na planecie.
Następnie obliczyłem losowe wysokości dla ośmiu wierzchołków sześcianu i rozłożyłem je na sześć kwadratów mapy sześcianu, tak aby każdy wierzchołek pojawił się trzy razy.
Gdy rekurencyjnie generuję wysokości fraktali dla punktów środkowych krawędzi, upewniłem się, że propaguję wierzchołki krawędzi twarzy do drugiej ściany, która je dzieli.
Kiedy skończę, mam mapę kostki, w której wszystkie tekstury krawędzi są podwojone, a wszystkie tekstury narożne są potrojone. Nie trzeba konwertować go na normalną mapę - użyłbym algorytmu w pracy Mortena Mikkelsena, aby renderować normalne bezpośrednio z mapy wysokości w czasie wykonywania.
W czasie wykonywania prawdopodobnie wyrenderowałbym quad, który obejmuje rzutowanie planety na ekran, i wykonałem test przecięcia pojedynczej promienia kuli w module cieniującym piksele, aby sprawdzić, czy trafiłem na planetę i gdzie. Na pewno bije rasteryzację wysoce sferycznego modelu kuli i uzyskuje również gładką krawędź.
źródło
Szum przemieszczenia punktu środkowego, przy maksymalnym przesunięciu skalowanym przez bezwzględną długość geograficzną piksela, może szybko wytworzyć sferyczną mapę szumów. Tabele kolorów uwzględniające wysokość, nachylenie, światło słoneczne lub długość geograficzną, ponieważ parametry mogą być używane do automatycznego ocieniania planety.
źródło