타일 ​​그리드에 대한 내비게이션 메시를 생성하려면 어떻게해야합니까?


18

나는 실제로 이것에 대한 프로그래밍을 시작하지는 않았지만 어쨌든 이것을 어떻게 할 것인지 알고 싶었다.

타일 ​​크기가 같고 크기가 같고 일부는 트래버스 가능하고 일부는 불가능합니다. 이 그리드에서 다각형의 탐색 메쉬를 만드는 방법은 무엇입니까?

내 생각은 통과 할 수없는 타일을 꺼내고 가장자리에서 선을 연장하여 다각형을 만드는 것이 었습니다. 그게 전부입니다. 어떤 충고?


2
기술적으로 그리드는 내비게이션 메시와 거의 같습니다. 실제로 그리드를 최적화하고 인접한 사각형을 병합하는 방법을 요구하고 있다고 생각합니다.
Kylotan

@Kylotan 그렇습니다. 이것이 바로 인접한 다각형을 결합하는 방법입니다.
로스 헤이스

답변:


28

다음은 RTS 게임을 위해 navmesh를 수행 할 때 생각해 낸 방법 중 하나입니다. 자체 제작 도구이며 타사 도구를 사용하지 않았으며 구현 및 버그 수정에 약 3 주가 걸렸습니다.

  1. Marching Squares 알고리즘을 사용 하여 장애물 타일을 윤곽선으로 변환 합니다. 지도 가장자리도 외곽선이므로 포함해야합니다.
  2. Douglas-Peucker 알고리즘을 사용하여 윤곽선의 포인트 수를 줄입니다 (아래 그림의 자주색 선)
  3. 모든 점을 들로네 삼각 분할 ( Delaunay Triangulation)에 공급 (가장 균일 한 삼각형을 얻기 위해)
  4. 빈 영역과지도 가장자리를 따라 점을 더 추가하십시오 (더 많은 탐색 메뉴를 얻기 위해)
  5. Delaunay가 제작 한 장애물 윤곽선과 플립 다각형을 확인하여 윤곽선과 일치시킵니다. -종종 들로네는 삼각형 (회색)과 윤곽이 일치하지 않는 (빨간색) 배치 한 다음 감지하고 뒤집어 야합니다. 다시 다각형으로 연결하고 윤곽선을 따라 분할하고 수동으로 삼각 분할 여기에 이미지 설명을 입력하십시오
  6. 장애물 내부를 자르기 - 장애물 안에있는 다각형을 제거합니다 (위 그림의 분홍색).
  7. 필요에 따라 나머지 삼각형과 정점 사이의 연결 데이터를 채우 십시오. 이것이 바로 네브 메시입니다.

결과:

타일 ​​맵 탐색


1

메쉬는 일반적으로 그래프로 구현됩니다. 그리드 기반지도에서 경로 찾기를 구현하려면 다음을 수행하십시오.

통과 가능한 각 사각형이 꼭짓점으로 표시되는 그래프를 만듭니다. 정점으로 표시되는 인접한 통과 가능한 사각형의 각 쌍은 그 사이에 모서리를 갖습니다. 그리고 당신은 끝났습니다.


1
navmesh가 일반적으로 구현되는 방식은 아닙니다. navmesh의 목적은 (그리고 어 커가 여기에서 질문을 한 이유는) 가장 유용한 공간에 걸쳐있는 최소한의 필요한 수의 다각형 (일반적으로 삼각형)으로 그래프를 최적화하여 좋은 경로를 찾는 데 필요한 단계와 메쉬를 정의하는 데 필요한 메모리 공간. 원시 구현은 엄청난 양의 메모리를 소비하고 귀중한 AI 처리 시간을 낭비합니다.
Gurgadurgen

당신이 올바른지. 물론 데시 메이션 (폴리곤 감소)은 합리적이고 바람직한 최적화입니다. op의 질문 을 읽을 때 그리드를 그래프로 바꾸려는 감각을 얻는 것입니다.
wolfdawn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.