죄송합니다. 그 제목이 그다지 설명이 없으면 죄송합니다. 어쨌든 무작위로 풍경을 생성하는 것을 다루고 있습니다. 나는 호수를 만들었지 만, 그들이 어떻게 만들어지기 때문에, 종종 직선/하강을 야기하며, 이는 바람직하지 않습니다. 가능한 한 호수를 만든 직후에 부드럽게하려고합니다. 최대 변화량을 정의하여 (육지의 높이가 그 이상 변화 할 수 없도록 함), 그것이 많이 달라지면 육지를 고치고 끝내면 종료합니다. 벌금.호수 주변의 땅을 부드럽게하기
문제 :
내 시도 수정 :
당신이 볼 수 있듯이 ... 그것은 작동하지 않았다. 호수가 단지 풍경을 가라 앉히기 때문에 그것이 실제로 일어나지 않아도되지만 그것은 내게 일어난다. 나는 내려야 만한다면 부서지기 쉽다고 생각한다. 단지 오른쪽이지만, 거의 동일해야합니다 왼쪽
//smoothing land nearby
int maxVariation = 2; //similar to the max height variation when the land is generated
//going right
for (int xPos = rightBound + 1, previousHeight = 0; ; ++xPos)
{
if (previousHeight == 0)
for (; previousHeight < size.y; ++previousHeight)
if (grid[0][rightBound][previousHeight] != BlockColor::DIRT && grid[0][rightBound][previousHeight] != BlockColor::GRASS)
{
--previousHeight;
break;
}
for (int y = 0; y < size.y; ++y)
if (grid[0][xPos][y] == BlockColor::WATER)
goto done_smoothing_right;
int height;
for (height = 0; height < size.y; ++height)
if (grid[0][xPos][height] != BlockColor::DIRT && grid[0][xPos][height] != BlockColor::GRASS)
{
--height;
break;
}
int difference = std::abs(height - previousHeight);
previousHeight = height;
if (difference > maxVariation)
{
for (int j = 0; j < size.y; ++j)
{
int toMove = difference;
while (j + toMove >= size.y)
--toMove;
grid[0][xPos][j] = grid[0][xPos][j + toMove];
}
}
else
goto done_smoothing_right;
}
done_smoothing_right:
int tomakegotowork;
참고 : 어쨌든, 여기 내 시도의 원천입니다. 이 작업을 올바르게 수행하려면 어떻게해야합니까?
도움을 주시면 감사하겠습니다.
는 편집 :나는이 문제를 해결 결코하지 않았다. 대신, 나는 (특정 높이에서) 공기를 측정하기위한 재귀 함수를 만들었고, 물로 채우기에 충분한 공기 포켓 (육지에 의해 형성된)이 있다면. 이것은 변경되지 않았기 때문에 매끈하게 보이는 토지의 이점이 있습니다.
rightBound 호수의 rightBound입니다 ... 희망이 도움이? 호수는 높이 0에서만 발생합니까? –
@MikeSaull 네, 오른쪽 바운드는 가장 오른쪽 물의 x입니다. 호수는 0시에만 발생하는 것이 아니라 현재의 육지 높이와 호수 깊이로 보입니다. –