런타임에 동적 환경에서 2D 네비게이션 메쉬를 생성하려면 어떻게해야합니까?


9

따라서 경로 찾기에 A *를 사용하는 방법을 파악했으며이를 그리드에서 사용할 수 있습니다. 그러나 내 게임 세계는 거대하고 플레이어를 향해 움직이는 많은 적을 가지고 있습니다. 이것은 움직이는 목표이므로 그리드 시스템은 경로 찾기에 너무 느립니다. 내비게이션 메시를 사용하여 노드 그래프를 단순화해야합니다.

메쉬가 작동하는 "어떻게"라는 개념을 이해합니다 (정점 및 / 또는 다각형 가장자리의 중심에서 노드를 통한 경로 찾기).

내 게임은 런타임에 절차 적으로 생성되는 동적 장애물을 사용합니다.

다음 그림과 같이 여러 장애물이있는 비행기를 가져 와서 탐색 가능한 메쉬를 프로그래밍 가능한 방법으로 다각형으로 나누는 방법에 대해 머리를 감쌀 수는 없습니다.

네비게이션 메쉬

어디서부터 시작해야합니까? 보행 가능 영역의 세그먼트가 이미 정의되어 있는지 또는 알고리즘이 맵을 통해 "보행"할 때 이전에 정의 된 보행 가능 영역을 세분화해야한다는 것을 깨달았을 때 어떻게 알 수 있습니까?

중요한 경우 nodejs에서 자바 스크립트를 사용하고 있습니다.


1
구현하려는 동적 파티셔닝은 맵 요소의 특성에 따라 다릅니다. 장애물 요소가 예제와 같이 그리드 정렬 사각형으로 완전히 구성되어 있습니까? 회전 된 사각형? 불규칙한 다각형? 또는 커브가 많은 비 다각형 모양? 장애물 모양에 대한 점 / 폴리 데이터가 있습니까? 그렇다면 삼각형, 사각형, 독점적으로 볼록 다각형 또는 볼록 다각형과 오목 다각형의 혼합에 관한 모양 데이터입니까?
Matthew R

@ 매튜 내 세계는 볼록 다각형 장애물, 곡선 및 오목 다각형으로 구성되어 있습니다. 각 장애물은 벡터 객체로 표시되는 정점이있는 다각형 객체로 저장됩니다.
Stephen

1
가치있는 것을 위해이 백서를 기반으로 한 솔루션을 개발 중입니다. gradworks.umi.com/3493710.pdf 성공하면 솔루션을 게시합니다.
Stephen

1
내비게이션 메시는 100 %가 아니라 어딘가로 갈 수 있는지 말해줍니다. 걸을 수있는 영역의 기본 개요 일뿐입니다. 동적 객체에 대해 충돌 검사를 수행해야합니다. 편집 : Ray의 말
dreta

@Stephen- Long Comment 답변을 참조하십시오 .
Matthew R

답변:


3

@Stephen - Long Comment- 시간이 있으면 읽어 볼만한 가치가있는 것 같습니다. 기본적으로 내가 제안한 것은 논문에 언급 된 Hertel-Mehlhorn 알고리즘의 선을 따르는 것입니다 (이 특정 알고리즘에 대한 참조는 여기 http://www.bringyou.to/compgeom/ 참조 ) 코너에 형성된 다수의 작은 삼각형의 발생을 감소시키기 위해 맵 측면 (플레이 영역의 외부 경계)을 몇 시간 동안 세분하는 것. 작은 삼각형은 경로 찾기를 수행하는 것보다 작을 수 있으므로 문제가 될 수 있습니다. Hertel-Mehlhorn은 삼각 측량에 더 관심이있는 경우 삼각 분할에 의해 생성 된 다각형을 줄이기위한 것입니다.http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/PolyPart/polyPartition.htm .

: 당신은 오히려 바퀴를 재발견하지 않는 게 좋을 경우에도,이 라이브러리가 실제로 당신이 필요한 모든 것을 할 것입니다 생각 http://code.google.com/p/polypartition/을 . Hertel-Mehlhorn을 포함한 여러 가지 옵션 중 하나로 삼각 측량 및 축소를 수행합니다. MIT 라이센스이므로 문제가있는 경우 비공개 소스 및 상업용 프로젝트에 사용할 수 있습니다.

당신이 당신의 구현에 계속 노력하기로 결정한다면, 나는 당신이 생각해 낸 것을보고 싶습니다.


1
@Mathew, 좋은 답변입니다. 그리고 그 논문을 반드시 읽어야합니다! 따르기 쉽고 훌륭한 기술 (특히 에이전트 기반 디스커버리 / 메시 생성에 관한 부록 A)을 설명합니다. 이 알고리즘의 버전을 자바 스크립트로 코딩하고 있으며 잘 나오고 있습니다. 완료되면 답변으로 게시하겠습니다.
Stephen

@Stephen이 작품보고 싶어요
kevzettler

@Stephen 나도 자바 스크립트 버전을 찾고 있어요
Apolo

6

메시가 아니라 계층 적 A * 접근 방식을 고려할 수 있습니다. 메시의 가장 큰 장점은 그리드의 복잡성을 줄이는 것이 아니라 그리드가 정렬되지 않은 게임 월드를 처리하는 것입니다.

계층 적 접근 방식을 사용하면 세계를 반복적으로 (쿼드 트리처럼) 세분화하고 노드간에 연결 정보를 생성 할 수 있습니다. 그런 다음 큰 세계 덩어리 사이의 경로를 신속하게 생성 할 수 있으며 더 큰 덩어리 내에서 경로를 찾기 위해 고해상도 그리드 만 사용할 수 있습니다.

계층 적 접근 방식은 수십 배 더 나은 성능을 제공하는 반면, 메시는 최소한 약간의 선형 개선 만 제공 할 것입니다.

순진한 접근 방식은 세상을 X로 X 더 큰 그리드 정렬 청크로 나누고 그들 사이의 연결 정보를 생성하는 것입니다 (예 : 청크 2x1에서 3x1에서 2x2까지의 경로와 평균 경로의 거리는 얼마입니까) .

특정 상황에서이 방법으로 항상 이상적인 경로를 얻지는 못할 수도 있습니다. 가변 크기의 청크 층을 생성하면 문제를 완화 할 수 있지만, 솔직히 말해서 문제의 경로를 만들어내는 것을 피하고 플레이어가 최적의 경로를 제외한 적을 발견 할 가능성이 거의 없다는 사실에 의지하는 것이 훨씬 쉽습니다 가장 타락한 사례.


1
추가 설명이 필요합니다. 게임이 그리드 정렬되어 있지 않습니다. 나는 800 x 600 픽셀 영역에 그리드를 만들고 있었고, 각 픽셀은 그리드의 한 공간입니다 (아직 *를 알아 내고 있었기 때문에 아직 성능에 대해서는 생각하지 않았습니다). 위의 예제 이미지와 같이 간단하지 않은 장애물이 있습니다. 문제를 설명하려고했습니다. 분명히 그러한 경기장을 개정해야했으며, 조사를 거친 후에 탐색 메쉬가 올바른 방법이라고 생각합니다.
Stephen

3

나는 당신이 이것을 너무 복잡하게 생각합니다. 탐색 메쉬를 즉석에서 생성하지 않아도됩니다. 대신 기본 세계에 정적 내비게이션 메시를 설치하십시오.

조향 동작을 사용하여 장애물 주위의 경로를 해결할 수 있습니다 (장애 회피 사용). 오프 확률로 장애물이 너무 크면 하나의 네비게이션 폴리에서 다음 네비게이션으로의 이동을 채우거나 완전히 차단합니다.이 가장자리 케이스를 확인하고 현재있는 폴리와 차단 된 것.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.