จะโหลดดาวเคราะห์ทรงกลมและภูมิภาคได้อย่างไร


15

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

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

ถ้าฉันต้องทำบนพื้นราบฉันจะทำอย่างง่ายดายด้วยระบบอันทรงสี่เหลี่ยม แต่ปัญหาตรงนี้ก็คือดาวเคราะห์เกือบจะเป็นทรงกลม

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

1. การตัดทรงกลมเป็นชิ้นสี่เหลี่ยม

วิธีการชิ้นสี่เหลี่ยม

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

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

2. เริ่มต้นจาก icosahedron

วิธีการ icosahedron

ที่นี่ฉันสามารถเพิ่มรูปสามเหลี่ยม tessellation รอบตำแหน่งของผู้เล่นเมื่อเขา / เธอเข้าใกล้

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


ฉันใช้ C ++ / OpenGL สำหรับมันดังนั้นสิ่งสำคัญในการสร้างและโหลดที่นี่คือจุดยอดที่แสดงถึงการลดพื้นผิวและสี / พื้นผิว


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

@AlecTeal ฉันพยายามจำลองดาวเคราะห์ ดังนั้นมันจึงเป็นทรงกลมทั่วโลก และปัญหาหลักคือผู้เล่นสามารถลองลงจอดบนจุดใดก็ได้บนเสาหรือตามแนวเส้นศูนย์สูตร
Aracthor

2
ดังนั้น .... คุณต้องถามว่าค้นหา "เครื่องมือเกมโลกทรงกลม" เพราะมีการใช้งานมากมาย ทำไมพวกเขาไม่ทำงาน นอกจากนี้นี่คือเหตุผลที่เรามีแผนที่ลูกบาศก์พวกเขาเป็นแผนภูมิมาตรฐานในโทโพโลยีที่หลากหลายใด ๆ ที่เป็นรูปทรงกลมสำหรับเหตุผลนี้!
Alec Teal

1
แนะนำให้ประเมินตัวเลือกทรงกลมแบบสี่เหลี่ยม
dnk drone.vs.drones

maths.kisogo.com/index.php?title= หมายเหตุ: Spherical_coordinatesร่างเบื้องต้น ต้องการภาพและจะปิด
Alec Teal

คำตอบ:


5

ตกลงดังนั้นฉันจึงเขียนมันออกมาที่นี่:

http://www.maths.kisogo.com/index.php?title=Notes:Spherical_coordinates

(ฉันต้องการมาร์กอัปทางคณิตศาสตร์และมันก็ค่อนข้างนาน)


การใช้เอกสาร

เอกสารเริ่มต้นด้วยการแนะนำแนวคิดของท่อร่วมไอเท็มคือสิ่งที่ชิ้นส่วนของมันคือ "homeomorphic" (โดยทั่วไป: เช่นเดียวกับ) ชิ้นของ R ^ n (R ^ 2 คือระนาบ x / y อย่างที่คุณอาจ ทราบ)

แผนภูมิครอบคลุมบางส่วน (อาจทั้งหมดแม้ว่าในกรณีของทรงกลมมันไม่สามารถครอบคลุมทั้งหมด) ของท่อร่วมไอดี

ในบทความผมพัฒนาชาร์ต 4 ดวงสำหรับทรงกลมที่รักษามุมไว้นั่นคือระยะทางปกติ

อย่างที่คุณได้พบว่าการให้พิกัดจุดบนทรงกลมนั้นค่อนข้างยากจริงๆ! สิ่งที่เราทำแทน (แม้ว่าในวงกลมในตัวอย่าง) จะให้พิกัดแต่ละจุดของแบบฟอร์ม (i, x, y) โดยที่ i คือตัวเลขระหว่าง 1 ถึง 6 สำหรับทรงกลม, 1 และ 4 สำหรับวงกลม นี่คือหมายเลขแผนภูมิ

x และ y หมายถึงมุมในแผนภูมินั้น (หรือเพียงแค่ x ถ้ามันเป็นวงกลม)

แผนภูมิทรงกลมทั้ง 6 รูปแบบนั้น ได้แก่ ครึ่งวงกลมบน / ล่าง, ซ้าย / ขวาและด้านหน้า / หลัง


พิกัด

ตอนนี้คุณสามารถให้จุดประสานงานที่ "ดี" กับ evey ซึ่งมีความประพฤติดี ในแง่ทางคณิตศาสตร์โดเมนของแผนภูมิเป็นแผนที่ "เปิด" ซึ่งหมายความว่ามีจำนวนบวกบางอย่างเช่นลูกบอลรอบจุดแต่ละจุดก็อยู่ในเซตเช่นกัน ตัวอย่างเช่นช่วง (0,1) (ชุดที่มี x หาก 0 <x <1) เปิดใช้ p ใด ๆ ใน (0,1) (เช่น 0.001) จากนั้นมีตัวเลข (เช่น 0.0005) เช่น จุดใดก็ตามภายใน 0.0005 ของ 0.001 ก็อยู่ใน (0,1) ด้วย

สิ่งนี้หมายความว่าคุณสามารถผ่านเส้นทางผ่านแผนภูมิ

ขณะนี้มีการทับซ้อน 45 องศาในแผนภูมิที่เราพัฒนา ซึ่งหมายความว่าถ้าคุณมีคุณสมบัติที่พิกัด (i, x, y) คุณสามารถระบุจุดของรูปแบบ (i, x + A, y + ข) ตราบเท่าที่aและbอยู่ระหว่าง -45 และ 45 (องศา)

จุดใด ๆ ของแบบฟอร์ม (i, x + a, y + b) สามารถแปลงเป็นจุดในพื้นที่ 3 มิติ "ปกติ" ได้อย่างง่ายดายโดยไม่มีปัญหา


การดำเนินงาน

ตอนนี้คุณมีวิธีจัดเก็บพิกัดบางอย่างบนทรงกลมและแสดงขอบเขตพื้นที่ขนาดใหญ่ที่มีพิกัดเหล่านี้พวกเขายังทำตัวเหมือนพิกัดพวกเขาเปิดตัวอย่างเช่น (ซึ่งเป็นปัญหาถ้าคุณใช้ 2 มุมแทน)

นอกจากนี้คุณยังสามารถทิ้งคำตอบ "วิธีสร้างทรงกลมปกติ" โดยสิ้นเชิงได้ในตอนนี้เพราะสิ่งที่คุณต้องทำคือทำ 6 ระนาบและให้แน่ใจว่าขอบของพวกมันเรียงกัน (ซึ่งไม่สำคัญ) และผลลัพธ์คือ:

คุณจะมีทรงกลมที่สวยงามพร้อมพิกัดที่ใช้งานง่าย

คำถามใด ๆ โปรดแสดงความคิดเห็นฉันได้ลองสมมติความรู้เล็กน้อยก่อน ฉันยังใหม่กับการสอนคน


@Alec_Teal ฉันตอบคุณตั้งแต่คุณโพสต์ซับซ้อนและเข้าใจยาก (ฉันไม่ได้ใช้สูตรคณิตศาสตร์มากนัก) แต่ฉันคิดว่าฉันต้องเข้าใจ ... วิธีการของคุณแตกต่างจาก cube แบบอิงจริงหรือไม่ ทรงกลมตามที่อธิบายไว้ข้างต้น? ผมไม่เข้าใจถ้า "แผนภูมิ" ของคุณมีตารางประมาณการหรือสิ่งอื่น ๆ ...
Aracthor

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

@Alec_Teal ฉันตรวจสอบแล้ว แต่ฉันยังไม่คิดว่าฉันได้ทุกอย่าง แต่ขอให้ดำเนินการต่อการสนทนานี้ในห้องแชท
Aracthor

13

ดังที่คุณได้แสดงให้เห็นแล้วมีวิธีแก้ไขปัญหานี้จำนวนมาก แต่ไม่เหมาะอย่างยิ่ง 100% ทรงกลมมีเล่ห์เหลี่ยม

Cube-based

เส้นทางทั่วไปหนึ่งที่ใช้โดย Spore และเกมอื่น ๆ (ค่อนข้างยากที่จะบอกได้โดยไม่ต้องแอบดูภายใต้ประทุน) คือการฉายทรงกลมลงบนลูกบาศก์และใช้ตารางสี่เหลี่ยมเหนือใบหน้าลูกบาศก์แต่ละก้อน

(นี่คือสิ่งที่ Alec Teal และ dnk drone.vs.drones อธิบายไว้ในความคิดเห็นด้านบน)

ทรงกลมแบ่งย่อยตามคิวบ์

( ภาพจากโพสต์นี้ซึ่งอธิบายโดยใช้การแทนลูกบาศก์สำหรับ LoD )

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

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

การเปลี่ยนแปลงฟังก์ชั่นการทำแผนที่เพื่อปรับปรุงความสม่ำเสมอ

ในทุกกรณีคุณจะยังคงมีการบิดเบือนมุมที่มุมซึ่งจุดตัดตารางปกติของสี่เหลี่ยมสี่ช่องที่มีมุม 90 องศากลายเป็นการประชุม 3 รูปสี่เหลี่ยมขนมเปียกปูนที่มีมุม 120 องศา

ฮอว์คิง-based

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

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

การระบุจุดใกล้เคียงนั้นค่อนข้างไม่ยุ่งยากเท่าที่ปรากฏ ทรงกลม geodesic geosicahedron ใด ๆ สามารถถูกแบนลงบนตารางสามเหลี่ยมปกติ:

เครื่องมือทดสอบทางธรณีวิทยาที่แบนราบลงบนตะแกรงสามเหลี่ยมปกติ ตาข่ายของ icosahedron บนตะแกรงสามเหลี่ยม

และตารางสามเหลี่ยมเป็นประจำจะได้รับการปฏิบัติเหมือนเป็นตารางสี่เหลี่ยมตามที่กล่าวไว้ที่นี่

ความแปรปรวนของตารางสามเหลี่ยม

ดังนั้นเมื่อคุณทราบว่าใบหน้าของ icosahedron ที่คุณอยู่ (ซึ่งสามารถทำได้ด้วย raycast เทียบกับตาข่าย icosahedral - ฉันไม่รู้วิธีการทางคณิตศาสตร์ที่ฉลาดในการทำให้ส่วนนั้นง่ายขึ้น) สภาพแวดล้อมสามารถใช้งานได้อย่างคุ้นเคย ข้ามตาราง :)

แก้ไข:

หากคุณใช้ geodesic Class-I คุณสามารถแกะดาวเคราะห์ของคุณออกเป็นแผนภูมิสี่เหลี่ยมห้าแผ่นเพื่อจัดเก็บชิ้นส่วน / พื้นผิว / ความสูงแผนที่ได้อย่างมีประสิทธิภาพคล้ายกับแผนภูมิสี่เหลี่ยมหกตารางที่คุณใช้สำหรับจัดเก็บเวอร์ชันลูกบาศก์

คลาย geosphere ลงในแผนภูมิสี่เหลี่ยม

(สิ่งนี้อาจช่วยแก้ไขข้อกังวลของ Fuzzy Logic ในคำตอบอื่นซึ่งอาจเป็นไปได้ แต่ซับซ้อนกว่าเล็กน้อยสำหรับ geodesics Class-II ฉันไม่ได้ตรวจสอบ Class-III)

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


1
มีบางสิ่งที่ดีที่นี่ ฉันจะ +1 แต่ฉันวางแผนที่จะเขียนคำตอบในภายหลัง (ฉันพยายามอยู่ห่างจากขั้นตอนแรกของการลงคะแนนเมื่อฉันตอบด้วย) ความคิดเห็นเดียวของฉันคือว่าวิธีนี้ดีกว่าสำหรับการเรนเดอร์ทรงกลมกว่าการสร้างแบบจำลองพื้นผิว
Alec Teal

เพียงแค่ใส่ในกรณีที่คุณอยากรู้อยากเห็นฉันได้เสร็จสิ้นคำตอบของฉัน
Alec Teal

4

Quad-sphere พร้อม chunked LOD เป็นวิธีที่ต้องการถ้าคุณต้องการที่จะไปจากพื้นดินสู่พื้นดินในทุกระดับของภูมิประเทศที่มีรายละเอียดไม่ว่าจะเป็นการทำแผนที่ความสูงและพื้นผิว

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

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

ดูบทความของ Sean O'Neil เกี่ยวกับการสร้างเอกภพขั้นตอนเกี่ยวกับ Gamasutra:
- ส่วนที่ 1 เสียง Perlin และ Fractal Brownian Motion สำหรับการทำแผนที่ความสูงและพื้นผิว
- ส่วนที่ 2 อัลกอริทึม ROAM สำหรับกระบวนงานตาข่ายกับ DLOD สำหรับการสร้างดาวเคราะห์ ทนทุกข์ทรมานจากปัญหาประสิทธิภาพการทำงาน ไม่แนะนำ แต่ดีสำหรับค่าการศึกษา
- ส่วนที่ 3 แก้ไขปัญหาที่เกิดขึ้นกับขนาดใหญ่การเพิ่มประสิทธิภาพและปัญหาจุดลอยตัว ส่วนใหญ่เกี่ยวข้องกับสเกลจักรวาล แต่ยังใช้กับดาวเคราะห์เมื่อเปลี่ยนจากสเกลปีแสงเป็นเซนติเมตรหากคุณต้องการ
- ตอนที่ 4 พูด ถึงการนำ Quad-sphere ไปใช้กับ DLOD แบบต้นไม้ขนาดใหญ่สำหรับการสร้างดาวเคราะห์ <- ดูบทความนี้โดยเฉพาะ


0

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


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