ดาวเคราะห์ขั้นตอนแผนที่ความสูงและพื้นผิว


19

ฉันกำลังทำงานกับเครื่องกำเนิดดาวเคราะห์ขั้นตอน OpenGL ฉันหวังว่าจะใช้มันสำหรับเกม RPG อวกาศซึ่งจะไม่อนุญาตให้ผู้เล่นลงไปยังพื้นผิวของดาวเคราะห์ดังนั้นฉันจึงไม่สนใจสิ่งที่เกี่ยวข้องกับ ROAM ในขณะนี้ฉันกำลังวาดลูกบาศก์ด้วย VBO และแมปลงในทรงกลม

ฉันคุ้นเคยกับเทคนิคการสร้างส่วนสูงแฟร็กทัลส่วนใหญ่และได้นำการแทนที่มิดพอยต์ของฉันมาใช้แล้ว (ไม่มีประโยชน์ในกรณีนี้ที่ฉันรู้)

คำถามของฉันคืออะไรเป็นวิธีที่ดีที่สุดในการสร้างความสูงของแผนที่ ผมมองที่ libnoise ซึ่งจะช่วยให้ฉันเพื่อให้ heightmaps tilable / พื้นผิว แต่เท่าที่ฉันสามารถดูฉันจะต้องสร้างสุทธิเช่นนี้

ปล่อยให้ปูกระเบื้องชัดเจน

ใครช่วยแนะนำเส้นทางที่ดีที่สุดให้ฉันได้บ้าง?

การป้อนข้อมูลใด ๆ จะได้รับการชื่นชมมาก

คำตอบ:


18

ก่อนอื่นฉันไม่แน่ใจว่าทำไมคุณต้องการใช้แผนที่ความสูง (เช่นการกระจัดของรูปทรงเรขาคณิต) หากผู้คนไม่สามารถลงจอดได้ดูเหมือนว่ามีประสิทธิภาพมากกว่าในการทำแผนที่ปกติหรือบางสิ่งบางอย่าง

ด้วยสิ่งที่กล่าวมาสิ่งที่คุณต้องการคือการแปลงจากแบบสุ่ม(x, y, z)ไปเป็นแบบ(u, v)พิกัดซึ่งไม่สำคัญ ไม่จำเป็นต้องใช้ cubemap

ข้อความแสดงแทน

ข้อความแสดงแทน

  1. ทุก(u, v)เทคมีความสูง (heightmap RGB = height) (x, y, z) = posและตำแหน่ง
  2. ค้นหาและปรับตำแหน่งให้เป็นNORMAL(x, y, z) = Nมาตรฐาน
  3. จุดสุดยอดใหม่ = pos+N*height.

สิ่งนี้จะทำงานได้ดีขึ้นเมื่อมี tessellation สูง ใช้การจับคู่libnoiseรูปทรงกลมที่เหมาะสมกับแผนที่ความสูงของคุณซึ่งจะมีลักษณะดังนี้ (แต่ขาวดำ):

ข้อความแสดงแทน


2

ฉันไม่เคยลองด้วยตัวเอง แต่ดูเหมือนว่าจะเป็นวิธีที่น่าสนใจมากในการสร้างทิวทัศน์ทรงกลม http://freespace.virgin.net/hugo.elias/models/m_landsp.htm


ฉันพบว่าวิธีนี้เป็นที่ชื่นชอบมากสำหรับgithub.com/williame/GlestNG
Will

1

การแมปจุดกึ่งกลางความสูงแทนที่เป็นจุดเริ่มต้นที่ดี OP ทำไมคุณถึงคิดว่ามันไม่ใช่

OP นั้นดีในการสร้างแบบจำลองพื้นผิวดาวเคราะห์เป็น cubemap เนื่องจากแผนที่แบบเรียบ (เช่นการฉายภาพ Mercator) จะมีการบิดเบือนที่น่าเกลียดและมีความซับซ้อนทางคณิตศาสตร์

ถ้าฉันเป็น OP ฉันจะลืมเรขาคณิตดาวเคราะห์ขนาดใหญ่ในตอนแรก ฉันจะทำ cubemap โดยที่แต่ละหน้ามี 2 ** N + 1 พิกเซล (2,3,5,9,17,33 ... ) และแต่ละ texel เข้ารหัสความสูง [0..N) โดยที่ 0 คือความสูงของ ร่องลึกต่ำสุดที่คาดหวังและ N คือระดับความสูงของภูเขาที่สูงที่สุดในโลก

จากนั้นฉันจะคำนวณความสูงแบบสุ่มสำหรับแปดจุดยอดของคิวบ์และแพร่กระจายลงในหกสี่เหลี่ยมจตุรัสของแผนที่ลูกบาศก์เพื่อให้จุดยอดแต่ละจุดปรากฏขึ้นสามครั้ง

เมื่อฉันสร้างความสูงของเศษส่วนซ้ำ ๆ สำหรับจุดกึ่งกลางของขอบฉันจะทำให้แน่ใจว่าได้เผยแพร่จุดยอดขอบใบหน้าไปยังใบหน้าอื่น ๆ ที่แบ่งปัน

เมื่อฉันทำเสร็จแล้วฉันจะมีแผนที่ลูกบาศก์ที่มีการประมวลผลขอบของข้อความเป็นสองเท่าและมุมมุมทั้งหมดจะเพิ่มขึ้นเป็นสามเท่า ไม่จำเป็นต้องแปลงเป็นแผนที่ปกติ - ฉันจะใช้อัลกอริทึมในกระดาษของ Morten Mikkelsenเพื่อสร้าง normals โดยตรงจาก heightmap ที่ runtime

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


1

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

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