Çoğu perlin gürültü algoritması, herhangi bir konumdaki gürültü değerini, benzer bir şeyle almanızı sağlar noise(x,y,z)
. Bu, yığın temelinde yığın oluşturmayı oldukça önemsiz hale getirir. Tek yapmanız gereken, yığın konumu yerine global konumu geçmek.
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);
Gördüğünüz gibi, yığın sınırları üzerinden yineleyerek ve bu küresel konumun sağlam olup olmadığını kontrol ederek yığın için arazi üretiyoruz. Bu, genel olarak araziyi oluşturmak için kullandığınız yöntemle aynıdır.
perlinNoise.get
küresel bir pozisyon alır ve yoğunluğunu döndürür. isSolid
Vokselin katı kalifikasyon için "yeterince yoğun" olup olmadığını görmek için basit bir test nerede olurdu.
perlinNoise.get
basit bir gürültü algoritmasından daha karmaşık olabilir. Dünyanızdaki vokselin derinliğine göre kontroller yapabilirsiniz. Örneğin, voksel "mutlak taban zemin seviyesi" olduğuna karar verdiğiniz değerin altındaysa, bir yoğunluğu döndürmek için perlin solucanlar algoritmasını kullanabilir, eğer mutlak tabanın üzerindeyse, size vermek için normal bir yoğunluk fonksiyonu kullanabilir daha çeşitli arazi. Ancak ikisi arasında bazı karıştırma tavsiye ederim.
Farklı Perlin gürültü işlevlerini birleştirmek, oynamak ve neyin işe yaradığını görmek için yapmanız gereken bir şeydir. Ortamınızı kurmak en iyisidir, böylece oyununuzu yeniden yüklemenize gerek kalmadan bazı değerleri değiştirebilir ve araziyi çalışırken değiştirebilirsiniz. Mutlu deneyler.