W przypadku „klasycznego” edytora terenu 3D można wykonać następujące kroki:
Wygeneruj siatkę (np. Siatkę kwadratów, każdy kwadrat złożony z dwóch trójkątów), wszystkie wierzchołki są wspólne dla trójkątów (tak, że na przecięcie jest tylko jedna normalna).
To powinno być zrobione 3DMesh i renderowane w twoim programie.
Zrób narzędzie do podnoszenia i opuszczania (mniejszych i większych) części siatki (musisz obliczyć, gdzie na siatce znajduje się kursor myszy i modyfikować siatki wierzchołków, ale tylko w górę iw dół).
Utwórz dużą teksturę (na przykład 1024x1024x4 lub lepszą) i teksturuj ją za pomocą tak zwanej mapy splat:
Umożliw mu malowanie (za pomocą R, G, B LUB Alpha, na przykład nie różowego) i wybieranie tekstur zastępujących te brzydkie kolory podstawowe (czerwony, niebieski, zielony, alfa), a ponadto mogą być przez nie reprezentowane:
Moduł cieniujący (który musisz utworzyć) powinien pomnożyć te ładne tekstury (np. Kamień, trawa, ...) przez intensywność na mapie splatmap (brzydka), a następnie wymieszać całość, aby na przykład wyglądała (z jak tylko 2 kolory), tak:
Przepraszam za duże zdjęcia, połączyłem to w pracy ...
Pierwszą rzeczą jest wyjaśnienie struktury danych terenu i tego, czego oczekujesz od edytora. Czy to jest siatka? Tablica wysokości? Jakiś system wokseli w stylu Minecraft? Czy musisz mieć możliwość dodawania elementów terenu, takich jak drzewa i budynki? Ręcznie, automatycznie czy jedno i drugie? Mógłbym kontynuować, ale masz pomysł.
Podstawowy edytor terenu nie jest trudny do napisania, ale szczegóły będą się bardzo różnić w zależności od tworzonej gry, a zatem od rodzaju terenu, który chcesz stworzyć.
źródło
Jest to głównie kontynuacja odpowiedzi Valmonda, ale nie wydaje się wystarczająco krótka, aby dodać jako komentarz.
Gdy zaczniesz tworzyć podstawowy edytor, możesz poeksperymentować, generując mapę wysokości w całości na GPU. Jest to całkowicie opcjonalne, ale jest to dobry sposób na odciążenie GPU w przypadku ciągle zmieniającego się terenu. Valmond wspomniał już o rozpryskiwaniu tekstury na module cieniującym piksele, ale można również użyć modułu cieniującego wierzchołki, używając wyszukiwania tekstury do podnoszenia i opuszczania wierzchołków siatki. Oto samouczek, jak to zrobić za pomocą modułu cieniującego wierzchołki. Elementy nie będące modułami cieniującymi są specyficzne dla języka C # i XNA, ale ważne są elementy kodu modułu cieniującego.
W takim przypadku kod po stronie procesora poradzi sobie ze zmodyfikowaniem tekstury w skali szarości zapisanej w pamięci. Siatka siatki pozostaje płaska, wierzchołki nie są aktualizowane przez procesor. Za każdym razem, gdy tekstura jest zmieniana, nowa tekstura może być przekazywana do GPU.
Należy pamiętać, że nie wszystkie modele modułów cieniujących obsługują próbkowanie tekstur na module cieniującym wierzchołków (na przykład w HLSL potrzebujesz co najmniej modelu cieniującego 3.0).
źródło
Możesz rzucić okiem na Ogre's ETM http://www.ogre3d.org/addonforums/viewforum.php?f=16 , powinien dać ci kilka pomysłów. Artifex Terra opiera się na nim, jeśli chcesz zobaczyć go w akcji.
źródło