플레이어에게 큰 공간이 필요한 XNA 게임을 만들고 있습니다. 현재 사용중인 테스트 하이트 맵은 4096x4096이며 4 비트 BMP로 저장됩니다.
내가하려고하는 것은 거대한 하이트 맵 파일을 가져 와서 게임에서 렌더링하는 것입니다. 내가 겪고있는 문제는 사용 가능한 메모리의 대부분을 사용하므로 전체 지형을 한 번에 메모리에로드하는 것이 비효율적이라는 것입니다.
내가 겪었던 또 다른 문제는 XNA 내에서 하드 제한 세트 때문에 지형을 하나의 프리미티브로 모두 렌더링 할 수 없다는 것입니다.
그 말로, 나는 여러 가지 솔루션을 발견했으며, 모두 아래에 나열했습니다.
- 현재 사용자의 위치를 기준으로 렌더링-기본적으로 세계 내에서 방향에 관계없이 사용자 주위에 사각형을 그립니다. 이것은 여전히 사용자가 볼 수없는 공간을 렌더링하기 때문에 내가 원하는 것이 아닙니다.
- 사용자의 방향과 위치를 기준으로 렌더링-하이트 맵의 픽셀을 렌더링 해야하는 삼각형을 검색하는 수식을 찾았지만 매우 어려웠습니다.
- 지형을 여러 청크로 분할하고 사용자에게 가장 가까운 것을 렌더링-사람들이 볼 수없는 청크를 여전히 렌더링하므로 여전히 효율적이지 않습니다. 그리고 하이트 맵을 여러 조각으로 분할해야하기 때문에 작업 집약적이며 확장 성이 큰 문제가됩니다.
이러한 솔루션을 시도한 후에는해야 할 일에 대한 아이디어가 부족합니다. 사람들이 이러한 복잡한 알고리즘을 수행하도록 지시하는 몇 가지 답변을 받았지만 어떻게 알고리즘을 접근하는지조차 모릅니다.
기본적으로 저는 XNA에서 엉성한 지형을 최대한 효율적으로 렌더링하는 간단하고 간단한 방법을 요구하고 있습니다.
나는 일반적으로 게임 개발에 익숙하지 않지만 유망한 것으로 보인다면 기꺼이 연구하려고합니다.
업데이트 1 : 지오 클립 매핑 방법을 조사한 후 코드 작성을 시작했습니다. 나는 모든 수학을 마쳤고 게임이 실행됩니다. 그러나 그것은 매우 비효율적입니다. 아마도 내 코딩이 잘못되었을 수 있습니다. 2FPS에서 실행되며 내 CPU의 전체 코어를 사용합니다. 코드를 작성하고 개선하려고하는데 도움이 더 필요하다고 생각합니다. 여기 Terrain manager 클래스 코드의 Pastebin이 있습니다. 더 효율적으로 사용하려면 나중에 더 많은 결과를 게시 할 것입니다.