흐르는 지형을“무작위로”만드는 올바른 방법


9

간단한 하향식 RTS 게임을 만들고 있습니다. 필요할 때 즉시지도를 "임의로"생성 할 계획입니다. 나는 '통과'로 작동하는 모든 것을 계획합니다.

  1. 모든 잔디로 지형을 채우십시오
  2. 돌아가서 임의의 자갈 분출을 추가하십시오
  3. 자갈을 반올림
  4. 두 번째 레이어에 산 풍경 그리기
  5. 산을 반올림

이제 아래 그림을 살펴보십시오.

여기에 이미지 설명을 입력하십시오

나는 내지도 편집기를 사용하여 이것을 손으로 만들었지 만 희망적으로 통과 / 3 단계 후에 결과가되도록 계획합니다.

자갈 모양이 자연스럽고 산발적으로 보일 수 있도록 자갈을 언제 어떻게 배치해야하는지 어떻게 결정해야합니까?

당신이 할 수 있다면 감사합니다! 모든 도움을 주셔서 감사합니다!

참고로 :

각 패스는 기본적으로 다음과 비슷한 모든 타일을 반복합니다 (지도는 40x40 타일로 나뉩니다).

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}

답변:


5

Perlin Noise ( 구현에 대한 StackOverflow 답변 참조 )를 사용하여 높이 맵을 생성 할 수 있습니다. 높이 맵에서 특정 높이 범위를 다른 타일에 매핑 할 수 있습니다. 다음과 같은 것 :

  • 최고 20 % 눈
  • 다음 20 % 자갈
  • 다음 40 % 잔디
  • 마지막 20 % 물

Perlin Noise 생성기 값으로 재생하여 생성되고 멋지게 보이는 지형을 가져와야합니다.


5

다른 사람들이 말했듯이 펄린 노이즈는 다른 유형의 타일을 배치 할 위치를 결정하는 데 유용한 데이터 소스가되어야합니다. 나는 그 생각을 보완하기 좋아하고 당신의 체크리스트의 세 번째 단계에와 도움이 될해야 두 개의 추가 자원을 연결 것 - 모서리를 라운딩을 .

이것은 자동 타일링 (auto-tiling) 이라고하는 프로세스 이며 구현하기 어려운 것은 아닙니다. 여러 가지 방법이 있지만, 대부분은 해당 위치에 어떤 그래픽을 그려야할지 결정하기 위해 각 타일에 대한 인접 정보를 계산하는 데 의존합니다.

이 문제를 해결하는 매우 우아한 방법은 인접한 각 타일 방향에 고유 한 플래그 값을 할당하고 타일의 모든 인접한 플래그를 합산하여 얻은 값이 올바른 위치에 해당하도록 스프라이트를 배치하는 것입니다 스프라이트 시트에 타일. 이 기사를 읽으십시오 기술을 매우 명확하게 설명하려면 를 .

그리고 여기 또 다른 자원의 기술의 또 다른 변화를 설명합니다.


아시다시피, 당신의 대답은 모퉁이를 돌 때까지 매우 도움이되었습니다. 고마워요 :) 실제로 모든 것이 작동합니다 (라운딩 코너조차도)!
Freesnöw

4

본질적으로 Perlin Noise 생성을 사용하여 맵을 생성 할 수 있습니다. 생성 된 높이 맵을 샘플링하고 특정 높이를 초과하는 맵 부분에 자갈 블록을 할당합니다.

다음은 그러한 시스템과 다른 유형의 지형을 구현하는 방법에 대한 훌륭한 참고 자료입니다.

예제에는 필요한 것보다 많은 단계가 있지만 개념은 동일합니다.

마인 크래프트 타입 월드 겐에 대한 추가 정보

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

여기에 이미지 설명을 입력하십시오

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