Próbuję znaleźć rozwiązanie tego problemu. Próbuję zbudować siatkę nawigacyjną w formacie siatki wierzchołków zablokowanych na x, y ułożyłem współrzędne w kształcie kwadratów dla przestrzeni 3D. Ale mam problemy z próbowaniem rozwiązania tego problemu.
Próbowałem zajrzeć do biblioteki Recast. Jest to dość solidna metoda, ale najwyraźniej zwalnia przy większych mapach i otwartej przestrzeni. Nie wiem też, w jaki sposób generują wierzchołki i krawędzie przestrzeni świata za pomocą mapy wysokości.
Moją kolejną myślą było zrobienie tego, co robił Unreal Engine 3.
https://udn.epicgames.com/Three/NavigationMeshReference.html
Który miał użyć raycastów do wygenerowania siatki. Nie mogłem wymyślić, jak zatrzymać rodzynki.
Więc ... moją następną opcją było pudełko, być może obsada pudełka. Utwórz podzielony wolumin o wielkości, która jest potęgą 2. Wyrównaj skrzynkę z siatką i wystrzel prostokątne pryzmaty w dół jak promień. Jeśli wyląduje na kawałku geometrii, który jest częścią ziemi, a prostokąt nie zostanie przecięty, pozostaw tam kwadrat. I idź w dół, dopóki nie zostaną osiągnięte granice głośności. Aby sprawdzić, czy krawędzie muszą być połączone, przypuszczam, że mógłbym sprawdzić, czy nachylenie między dwiema parami wierzchołków mieści się w nachyleniu, na którym można chodzić, łącz je, jeśli to prawda.
Moje główne problemy to ... to nie wydaje się zbyt optymalne. Nie zastanawiając się nad tym, przy szacowaniu procesem jest O (N ^ 3) dla poziomu wielowarstwowego. Co może stać się dość paskudne.
Ostatni bit dotyczy automatycznego tworzenia prostokątnych grup tych kwadratów. Nie jestem do końca pewien, jak to zrobić. Implementacja Unreal rozdziela je według nachyleń. Staram się jednak zachować format siatki. To nie jest całkowicie konieczne. Nadal występują problemy z tworzeniem dużych prostokątnych płytek w celu podzielenia procesu wyszukiwania ścieżki na podstawie poszczególnych płytek. Płytki nie mogą być ani za duże, ani za małe.
Więc pytania są ...
Jaki byłby skuteczny sposób na wygenerowanie tego przepasanego navmesh? A jaki byłby dobry sposób na tworzenie kafelków?