길찾기
다익스트라, 플로이드 등등,
다양한길찾기 알고리즘들이 있지만 Pass
• A* 알고리즘
가장 기본적이고 대중적인 길찾기 방식
간단하게 설명해서 이웃 노드들을 돌며
목적지까지의 거리를 계속 계산해
가장 가까운 길을 찾음
그나마 위에것들에 비해 실시간 연산 비용이 싼 편이지만
그마저도 비싸서 더 효율적인 알고리즘이 수도없이 많음…
1. 깃헙 SDL2다운 https://github.com/libsdl-org/SDL/tree/SDL2
*다른 버전 받으면 안됨!!
SDL2 설치
2. ...SDLVisualC 경로의 SDL.sln 솔루션 실행
솔루션 중에서 SDL2와 SDL2main 두개만 lib으로 뽑으면 됨
19.
1. 빌드된 lib파일은 RecastDemoContribSDLlibx86 폴더로 복붙
2. SDLinclude 폴더 채로 RecastDemoContrib 복붙
SDL2 설치
네비 메쉬 생성
•Step 1. Initialize build config (몰라도 됨, 툴 GUI 셋팅)
• Step 2. 폴리곤 복셀화
Rasterize input polygon soup.
• Step 3. 이동 가능 표면 필터링
Filter walkables surfaces.
• Step 4. 표면 추리기 및 영역 분할
Partition walkable surface to simple regions.
• Step 5. 윤곽선 추출
Trace and simplify region contours.
• Step 6. 네비 메쉬 생성
Build polygons mesh from contours.
• Step 7. 네비 메쉬 디테일 조정
• Create detail mesh which allows to access approximate height on each polygon.
• (Optional) Step 8. Create Detour data from Recast poly mesh.
Step 2. 폴리곤복셀화
폴리곤의 기울기가 설정된 Agent Slope보다 높다면 제외 (절벽임)
전체 영역을 CellSize / CellHeight 크기의 직육면체로 분할 후
폴리곤이 걸쳐있다면 해당 직육면체 사용 (AABB 점 충돌)
Rasterize input polygon soup.
24.
Step 3. 이동가능 표면 필터링
복셀끼리의 높이차를 Agent MaxClimb와 비교
(다리길이 검사)
Filter walkables surfaces.
Agent Height에 따라 위&아래 사이를 지나갈 수 있는지 검사
(키높이 검사)
25.
Step 4. 영역분할
Partition walkable surface to simple regions.
복셀 정보로 영역화를 진행,
HeightField(Height Map)을 구성한다,
인접한 복셀끼리 서로이웃 추가 해줌
에이전트 너비 체크 및 영역(Region)을 분할한다.
분할 방식은 세가지를 지원하는데 각각 장단점이 있음
(속도x 디테일o) VS (디테일x 속도 o)
Watershed Monotone Layer
Step 5. 윤곽선추출
Trace and simplify region contours.
윤곽선(Contours) 즉 네비메쉬가 될 정점들을 찍는다
HeightField 정보를 기반으로 직접 윤곽선을 따라(Walk)가면서 정점을 찍음
Region 단위로, 이웃과 인접한 정점은 따로 기록해놈
처음에 뽑힌 정점들은 너무 디테일하기 때문에 직선으로 단순화시킨다.
29.
Step 6. 네비메쉬 생성
단순화된 윤곽선 추출 데이터를 기반으로 폴리곤 구성
단순화된 폴리곤이기 때문에 지형에 묻혀있는 모습
31.
Step 7. 네비메쉬 디테일 조정
만들어두었던 HeightFeild 및 원본 mesh를 참고하여 디테일 조절
Create detail mesh which allows to access approximate height on each polygon.