Bu başlık çok açıklayıcı değilse üzgünüz. Her neyse, rastgele oluşturulmuş manzaralarla ilgili bir şey üzerinde çalışıyorum. Göller yaptım, ama nasıl yapıldığından dolayı, çoğu zaman arzu edilmeyen düz kenarlara/düşüşlere neden oluyorlar. (Varsa, gölü yaptıktan hemen sonra), bir maksimum varyasyon miktarını tanımlayarak (yani, arazi yükseklikleri bundan daha fazla değişmeyecek şekilde) düzeltmeye çalışıyorum ve çok fazla değiştiğinde araziyi düzeltmek zorundayım ve eğer varsa ince.Göller Etrafında Pürüzsüzleştirici Araziler
sorun:
Benim teşebbüs düzeltme:
Gördüğünüz gibi ... işe yaramadı. Aynı zamanda benim için de gerçekleşir, sanırım aşağı inmek zorunda olsaydı, bu durumun gerçekleşmemesi gerekiyordu, çünkü göller sadece manzarayı batırdı. Sadece sağ taraf olmakla yaklaşık aynı olmalıdır sol
//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;
Not: Neyse, işte benim girişimi kaynağıdır. Bunu nasıl doğru yapabilirim?
Yardım ederseniz yardımcı olun.
DÜZENLEME:ben bu sorunu çözmek yapmadım. Bunun yerine, havayı ölçmek için (belli bir yükseklikten) ve bir hava cebi (toprak tarafından oluşturulmuş) yeterliyse, su ile doldurmak için bir özyineleme işlevi yaptım. Bu, arazinin pürüzsüz göründüğünden, avantajlı olduğu için değişmiştir.
rightBound gölün rightBound olduğunu ... Umarım yardımcı olur? Göller sadece yükseklik 0'da mı olur? –
@MikeSaull Evet, rightBound en sağdaki suyun x'i. Göller sadece 0'da değil, halihazırdaki kara yüksekliği ve göl derinliği ile aynı görünüme sahiptir. –