Mit den meisten Perlin-Rauschalgorithmen können Sie den Rauschwert an einem bestimmten Ort mit so etwas wie abrufen noise(x,y,z)
. Dies macht es ziemlich trivial, Rauschen Stück für Stück zu erzeugen. Alles, was Sie tun müssen, ist die globale Position anstelle der Blockposition zu übergeben.
for(int i = 0; i < CHUNKMAX_X; i++)
for(int j = 0; j < CHUNKMAX_Y; j++)
for(int k = 0; k < CHUNKMAX_Z; k++)
if(isSolid(perlinNoise.get(chunkPosition.x + i,
chunkPosition.y + j,
chunkPosition.z + k))
thisChunk[i,j,k] = new Voxel(solid);
else
thisChunk[i,j,k] = new Voxel(air);
Sie sehen also, wir generieren Terrain für den Chunk, indem wir über die Chunk-Grenzen iterieren und prüfen, ob diese globale Position solide ist oder nicht. Dies ist wahrscheinlich dieselbe Methode, mit der Sie das Gelände im Allgemeinen generieren.
perlinNoise.get
nimmt eine globale Position ein und gibt ihre Dichte zurück. Wo isSolid
wäre nur ein einfacher Test, um zu sehen, ob das Voxel "dicht genug" ist, um sich für fest zu qualifizieren.
perlinNoise.get
kann komplexer sein als nur ein einfacher Rauschalgorithmus. Sie können Überprüfungen basierend auf der Tiefe des Voxels in Ihrer Welt durchführen lassen. Befindet sich das Voxel beispielsweise unter dem von Ihnen festgelegten "absoluten Grundbodenniveau", kann es mithilfe des Perlin-Würmer-Algorithmus eine Dichte zurückgeben. Wenn es über der absoluten Basis liegt, kann eine normale Dichtefunktion verwendet werden abwechslungsreicheres Gelände. Ich würde jedoch eine Mischung zwischen den beiden empfehlen.
Das Kombinieren verschiedener Perlin-Rauschfunktionen ist nur etwas, mit dem Sie spielen und sehen müssen, was funktioniert. Am besten richten Sie Ihre Umgebung so ein, dass Sie nur einige Werte ändern und das Gelände im laufenden Betrieb austauschen können, ohne Ihr Spiel neu laden zu müssen. Viel Spaß beim Experimentieren.