एक निजी परियोजना के रूप में, मैं एक इलाक़ा जनरेटर बनाने की कोशिश कर रहा हूँ, जो कि इलाके को कैसल स्टोरी के सुगम इलाके जैसा कुछ बना देगा।
यदि आपने इसे यहाँ पहले नहीं देखा है, तो:
तो जैसा कि आप देख सकते हैं, यह ब्लॉकों और "चिकनी" ब्लॉकों का संयोजन है।
इस लुक का अनुकरण करने के लिए मैंने जो कुछ करने की कोशिश की है, वह प्रत्येक सतह ब्लॉक को एक मिनी ऊंचाई देना है। यह आम तौर पर काम करता है, लेकिन कुछ मुद्दे हैं, इस तरह से एक इलाके की उपज:
समस्या यह है कि प्रत्येक ब्लॉक 1x1x1 है, लेकिन कभी-कभी किसी विशेष स्थान पर ऊंचाई नकारात्मक या> 1 है। उस स्थिति में, मैं इसे क्लिप करता हूं और ऊंचाई को 0 या 1 पर सेट करता हूं।
यह समझने के लिए कि मेरा क्या मतलब है, यहाँ एक चित्र है:
ऊंचाई उत्पन्न करने के लिए, मैं मूल रूप से करता हूं:
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);
}
}
शायद "गलत" पेर्लिन शोर मूल्य का उपयोग करके मैं इसे गलत तरीके से आ रहा हूं?
किसी भी तरह की सहायता का स्वागत किया जाएगा!