ส่วนใหญ่ขั้นตอนวิธีการ Perlin noise(x,y,z)
เสียงจะช่วยให้คุณสามารถเรียกค่าเสียงที่สถานที่ใดก็ตามที่มีสิ่งที่ต้องการ เรื่องนี้ทำให้มันค่อนข้างน่ารำคาญที่จะสร้างเสียงบนก้อนโดยพื้นฐาน สิ่งที่คุณต้องทำคือส่งตำแหน่งทั่วโลกแทนตำแหน่งที่เป็นก้อน
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);
ดังนั้นคุณสามารถเห็นได้ว่าเรากำลังสร้างภูมิประเทศสำหรับก้อนโดยวนซ้ำพื้นที่ก้อนและตรวจสอบเพื่อดูว่าตำแหน่งโลกที่เป็นของแข็งหรือไม่ นี่เป็นวิธีการเดียวกับที่คุณใช้เพื่อสร้างภูมิประเทศโดยทั่วไป
perlinNoise.get
รับตำแหน่งระดับโลกและส่งคืนความหนาแน่น ซึ่งisSolid
จะเป็นการทดสอบง่ายๆเพื่อดูว่า voxel นั้น "มีความหนาแน่นเพียงพอ" ที่จะมีคุณสมบัติเป็นของแข็งหรือไม่
perlinNoise.get
อาจซับซ้อนกว่าอัลกอริธึมสัญญาณรบกวนแบบง่าย คุณสามารถตรวจสอบตามความลึกของ voxel ในโลกของคุณ ตัวอย่างเช่นหาก voxel อยู่ต่ำกว่าที่คุณตัดสินใจคือ "ระดับพื้นดินพื้นฐานที่แน่นอน" จากนั้นมันสามารถใช้อัลกอริทึม perlin Worms เพื่อคืนค่าความหนาแน่นหากอยู่เหนือฐานแน่นอนก็สามารถใช้ฟังก์ชันความหนาแน่นปกติเพื่อให้คุณ ภูมิประเทศที่หลากหลายมากขึ้น ฉันอยากจะแนะนำการผสมระหว่างสองอย่างไรก็ตาม
การรวมฟังก์ชั่นเสียงรบกวนของ Perlin ที่แตกต่างกันเป็นเพียงสิ่งที่คุณต้องเล่นด้วยและดูว่าอะไรทำงานได้บ้าง เป็นการดีที่สุดที่จะตั้งค่าสภาพแวดล้อมของคุณเพื่อให้คุณสามารถเปลี่ยนค่าบางอย่างและสลับพื้นที่โดยไม่ต้องโหลดเกมของคุณใหม่ มีความสุขในการทดลอง