Kişisel bir proje olarak, Castle Story'nin pürüzsüz arazisine benzeyen bir arazi oluşturacak bir arazi jeneratörü yapmaya çalışıyorum.
Daha önce görmediyseniz, burada:
Gördüğünüz gibi, blokların ve "pürüzsüz" blokların birleşimi.
Bu görünümü taklit etmek için yapmaya çalıştığım, her yüzey bloğuna mini bir yükseklik haritası vermektir. Bu genellikle işe yarar, ancak böyle bir arazi veren bazı sorunlar vardır:
Sorun şu ki, her blok 1x1x1, ancak bazen belirli bir konumdaki yükseklik negatif veya> 1'dir. Bu durumda, onu kırparım ve yüksekliği 0 veya 1 olarak ayarladım.
Ne demek istediğimi daha iyi açıklamak için bir şema:
Yüksekliği oluşturmak için temelde şunu yaparım:
genColumn(int x, int z)
{
int highestBlockY = (int)noise2d(x, z);
bool is_surface = true;
for(int y = max_height - 1; y >= 0; y--)
{
Block b;
if(is_surface)
{
b = Block.Grass;
b.HasHeightMap = true;
// generate heightmap
for(int ix = 0; ix < 5; ix++)
{
for(int iz = 0; iz < 5; iz++)
{
float heightHere = noise2d(x + ix / 4, z + iz / 4) - y;
// clip heights
if(heightHere > 1)
heightHere = 1;
if(heightHere < 0)
heightHere = 0;
b.HeightMap[ix][iz] = heightHere;
}
}
is_surface = false;
}
else
{
b = Block.Dirt;
}
setBlock(x, y, z, b);
}
}
Belki de buna "doğru" perlin gürültü değerini kullanarak yanlış yaklaşıyorum?
Herhangi bir yardım büyük mutluluk duyacağız!