2014-06-25 8 views
8

में मैं कुछ इस तरह तैयार करना चाहता हूं: my cliffs : cliffs
मैं तेज मोड़ के साथ पर्लिन शोर का उपयोग, मेरे कोड उन चट्टानों पैदा करता है।चट्टानों इलाके पीढ़ी Minecraft की तरह खेल

for (int x = 0; x < sizeX; x++) 
    { 
     for (int z = 0; z < sizeZ; z++) 
     { 
      int floorY = map.GetMaxYNotWater(x, z); 
      float n = hillsNoise.Noise(x, z); 
      int hillY = (int)(curveHills.Evaluate(n) * 80f); 
      if (hillY > floorY + 5) 
      { 
       for (int y = hillY; y > floorY; y--) 
       { 
        map.SetBlock(GetBlock(y), new Vector3i(x, y, z)); 
       } 
      } 
     } 
    } 

मैं उन्हें लटकाने वाली चीजों को बनाने के लिए "कट" कैसे कर सकता हूं?

मैं अतिरिक्त वक्र के साथ इस तरह यह करने की कोशिश की:

for (int x = 0; x < sizeX; x++) 
    { 
     for (int z = 0; z < sizeZ; z++) 
     { 
      int floorY = map.GetMaxYNotWater(x, z); 
      float n = hillsNoise.Noise(x, z); 
      int hillY = (int)(curveHills.Evaluate(n) * 80f); 
      if (hillY > floorY + 5) 
      { 
       int c = 0; 
       int max = hillY - floorY; 
       max = (int)(max * curveHillsFull.Evaluate(n)) + 1; 
       for (int y = hillY; y > floorY && c < max; y--, c++) 
       { 
        map.SetBlock(GetBlock(y), new Vector3i(x, y, z)); 
       } 
      } 
     } 
    } 

लेकिन यह उड़ान द्वीपों पैदा करता है। Flying islands तो पहले स्क्रीनशॉट परिणामों को प्राप्त करने के लिए मैं क्या कर सकता हूं?

+0

अगर आप पहले के परिणाम के लिए "घटाना" दूसरी एल्गोरिथ्म का परिणाम क्या ? इससे मुझे कुछ छेद मिलेगा जो मुझे लगता है कि – BlackBear

+0

@ ब्लैकबियर नॉप, इससे केंद्र से कटौती की जाएगी, लेकिन मुझे इसे बाहर से कटौती करने की ज़रूरत है – Vlad

उत्तर

0

मैं यह नहीं कह सकता कि माइनक्राफ्ट कैसे करता है, लेकिन वोक्सेल इलाके के साथ अपने अनुभव से, क्लाउड की तरह कुछ के रूप में वोक्सेल ग्रिड के बारे में सोचना है: प्रत्येक वोक्सेल में घनत्व होता है, और जब वह घनत्व काफी अधिक है, यह बादल का 'दृश्यमान' हिस्सा बन जाता है और आप वोक्सल भरते हैं।

तो बल्कि घनत्व मूल्य की गणना, कुछ इस तरह पर मिनट काम की गणना और अधिकतम वाई स्तर, की तुलना में:

for (int x = 0; x < sizeX; x++) 
    { 
     for (int y = 0; y > sizeY; y--) 
     { 
      for (int z = 0; z < sizeZ; z++) 
      { 
       //This means less density at higher elevations, great for turning 
       //a uniform cloud into a terrain. Multiply this for flatter worlds 
       float flatWorldDensity = y; 

       //This calculates 3d Noise: you will probably have to tweak this 
       //heavily. Multiplying input co-ordinates will allow you to scale 
       //terrain features, while multiplying the noise itself will make the 
       //features stronger and more or less apparent 
       float xNoise = hillsNoise.Noise(x, y); 
       float yNoise = hillsNoise.Noise(x, z); 
       float zNoise = hillsNoise.Noise(y, z); 
       float 3dNoiseDensity = (xNoise + yNoise + zNoise)/3; 

       //And this adds them together. Change the constant "1" to get more or 
       //less land material. Simple! 
       float ActualDensity = flatWorldDensity + 3dNoiseDensity; 
       if (ActualDensity > 1) 
       { 
        map.SetBlock(GetBlock(y), new Vector3i(x, y, z)); 
       } 
      } 
     } 
    } 
संबंधित मुद्दे