การสร้างพูลหรือทะเลสาบสุ่ม


9

ฉันใช้งานฟังก์ชั่นที่สามารถวาดรูปหลายเหลี่ยม แต่ฉันไม่สามารถสร้างรูปทรงที่เรียบซึ่งเลียนแบบขอบโค้งมนของทะเลสาบ ฉันพยายามสร้างวงกลมสองวงและเชื่อมขอบ แต่มันมีความผันแปรหรือความเรียบไม่พอ ไม่มีใครมีตัวชี้หรือความคิดใด ๆ ที่สามารถสร้างรูปร่างเช่นนี้ได้หรือไม่?


ฉันเคยดูโค้ง bezier ปรากฏว่าฉันอาจจะสามารถสร้างทะเลสาบจากที่ ใครบ้างมีประสบการณ์กับพวกเขาในอาร์เรย์ 2d?
Manderin87

คำตอบ:


8

alwyndพูดถึงเสียง Perlin นี่คือวิธีที่ฉันสร้างรูปร่างเกาะสำหรับเครื่องสร้างแผนที่รูปหลายเหลี่ยม:

  1. สร้างเสียงเพอร์ลิน
  2. สำหรับแต่ละสถานที่(x, y)ในบิตแมปเสียง, คำนวณระยะทางจากศูนย์, ปกติเพื่อให้บิตแมป (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy)2x2:
  3. สถานที่ตั้งเป็นส่วนหนึ่งของเกาะถ้า(x, y) noise[x, y] > 0.3 + 0.4*d*dขั้นตอนนี้พยายามทำให้รูปทรงกลมโดยการตัดส่วนที่อยู่ไกลจากศูนย์กลาง

หมู่เกาะค่อนข้างขรุขระมากกว่าทะเลสาบ แต่ฉันไม่แน่ใจว่ารูปร่างเหล่านี้จะเป็นที่ชื่นชอบของคุณหรือไม่ ฉันได้ทำการสาธิตอัลกอริทึมด้านบนโดยมีปุ่มที่ด้านล่างเพื่อควบคุมตัวเลขเวทย์มนตร์สองตัว อาจมีค่าที่แตกต่างกันของตัวเลขเวทย์มนตร์ 0.3 และ 0.4 ที่สร้างรูปร่างที่คุณชอบ


2
งานของคุณคือแรงบันดาลใจที่สำคัญ Amit + 10k ถ้าทำได้ 5 ปีหรือมากกว่านั้นด้วยความมหัศจรรย์และความเพลิดเพลินฉันหมดเวลาอ่านบล็อกของคุณแล้ว
วิศวกร

4

คุณสามารถใช้อัลกอริธึม Perlin Noise เพื่อสร้างทะเลสาบให้คุณถ้าคุณใช้มุมมองจากบนลงล่าง (รูปร่างรูปหลายเหลี่ยมเสียงเหมือนคุณ) ผู้ชายคนนี้จาก Stanford ก็ทำเช่นนั้น

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/


1
"คนที่แต่งตัวประหลาดจาก Stanford" ก็เป็นผู้ใช้ในเว็บไซต์นี้เช่น FYI
วิศวกร

ใครไม่ =) ฉันอาจเริ่มจากสัญญาณรบกวน (perlin, fractal) แต่เบลอผลลัพธ์เพื่อผลลัพธ์ "jaggy" ที่น้อยลง บทความยอดเยี่ยม btw - รักที่เขาทำแม่น้ำ
Jari Komppa

0

วิธีหนึ่งคือเริ่มต้นด้วยรูปหลายเหลี่ยมขั้นพื้นฐานอาจเป็นวิธีวงกลม 2 วงของคุณ

ก่อนอื่นชดเชยจุดทั้งหมดแบบสุ่มดังนั้นอย่ามองเหมือนวงกลมมากเกินไปจากนั้นสำหรับทุก ๆ ขอบแบ่งเป็น 2 และชดเชยจุดกึ่งกลางด้วยการสุ่มจำนวนเล็กน้อย ทำเช่นนี้ต่อไปจนกว่าคุณจะมีรายละเอียดที่จำเป็น
สิ่งนี้คล้ายกับสิ่งที่ทำเมื่อสร้างสายฟ้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.