Pathfinding bez tilów

0

Słaby jestem z pathfindingu i przydała by mi się pomoc, bo nie wiem od czego właściwie zacząć... Chciałbym napisać algorytm który będzie wyliczał to, gdzie dany statek (no w moim przypadku statek...) powinien polecieć, by nie walnąć w jakiegoś rodzaju przeszkode. Mapa nie jest zbudowana z tilów. Każdy obiekt może mieć ustawiony precyzyjny punkt x i y, a jego ściany mogą być reprezentowane przez nieregularne very-low poly, albo po prostu low poly kształty (koła, kwadraty, prostokąty...itp)

http://i61.tinypic.com/10r8dpd.jpg
user image

Statek również będzie miał ściany, ale chciałbym przyjąć, że będzie punktem.

Z artykułów na temat pathfindingu jakieś 80% są na temat A* - na mapie składającej się z kwadratowych tilów. Tutaj jest to raczej niedopuszczalne. (Nie podziele mapy na tyle tilów, by to było w miare precyzyjne... same generowanie takiej ogromnej mapy było by trudne)

Myślalem o tym by podzielić obszar w którym można się poruszać na jakieś tripoly, które będą się łączyły z wierzchołkami ścian... czy coś podobnego, jestem otwarty na propozycje.
Wiem, że to raczej nie jest zadanie łatwe do osiągnięcia, ale czy ktoś ma pomysł co można z tym zrobić?

1

A* to podstawa, tylko zamiast korzystać z płytek to wystarczy inaczej podzielić teren. Jesteś na dobrym tropie.
https://en.wikipedia.org/wiki/Navigation_mesh
http://gamedev.stackexchange.com/questions/1327/how-does-navigation-mesh-path-finding-work
http://gamedev.stackexchange.com/questions/20392/a-navigational-mesh-path-finding?lq=1
Jeśli mapa jest robiona ręcznie to zrobienie takiego navmesha powinno być dosyć proste. W przeciwnym wypadku będziesz się musiał trochę namęczyć.

0

Dzięki za pomoc. Trochę przysiadłem nad tym i w sumie już prawie skończyłem... ;)

EDIT: jeszcze lepiej.... znalazłem w boostcie A* już zaimplementowany do grafów.. http://www.boost.org/doc/libs/1_46_0/libs/graph/doc/astar_search.html

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.