ฉันจะสร้างตาข่ายนำทางสำหรับตารางย่อยได้อย่างไร


18

ฉันยังไม่ได้เริ่มเขียนโปรแกรมสำหรับอันนี้ แต่ฉันต้องการที่จะดูว่าฉันจะทำอย่างไรต่อไป

สมมติว่าฉันมีตารางของกระเบื้องขนาดเท่ากันทั้งหมดที่ผ่านได้และบางอันไม่มี ฉันจะสร้างโครงข่ายการนำทางของรูปหลายเหลี่ยมจากกริดนี้ได้อย่างไร

ความคิดของฉันคือการนำกระเบื้องที่ไม่สามารถผ่านได้และขยายเส้นจากขอบเพื่อสร้างรูปหลายเหลี่ยม ... นั่นคือทั้งหมดที่ฉันได้รับ คำแนะนำใด ๆ?


2
ในทางเทคนิคแล้วกริดนั้นเทียบเท่ากับระบบนำทาง ฉันสงสัยว่าคุณกำลังขอวิธีเพิ่มประสิทธิภาพของตารางและรวมสี่เหลี่ยมที่อยู่ติดกัน
Kylotan

@ Kylotan ใช่นั่นคือสิ่งที่ฉันหมายถึงเพียงวิธีการรวมรูปหลายเหลี่ยมที่อยู่ติดกัน
Ross Hays

คำตอบ:


28

นี่เป็นหนึ่งในวิธีที่ฉันคิดเมื่อทำ navmesh สำหรับเกม RTS โปรดทราบว่ามันเป็น homebrew ไม่ใช้เครื่องมือของบุคคลที่สามใช้เวลาประมาณ 3 สัปดาห์ในการติดตั้งและแก้ไขข้อผิดพลาด:

  1. ใช้สี่เหลี่ยมวงขั้นตอนวิธีการแปลงกระเบื้องอุปสรรคเข้าไปในโครงร่าง โปรดทราบว่าขอบของแผนที่นั้นเป็นโครงร่างด้วยและจะต้องรวมไว้ด้วย
  2. ลดจำนวนคะแนนในโครงร่างโดยใช้อัลกอริธึมDouglas-Peucker (เส้นสีม่วงที่ภาพล่าง)
  3. ป้อนคะแนนทั้งหมดในDelaunay triangulation (เพื่อให้ได้รูปสามเหลี่ยมที่สม่ำเสมอที่สุด)
  4. เพิ่มจุดเพิ่มเติมในพื้นที่ว่างและตามขอบแผนที่ (เพื่อรับ navmesh ได้มากขึ้น)
  5. ตรวจสอบโครงร่างสิ่งกีดขวางและพลิกรูปหลายเหลี่ยมที่ผลิตโดย Delaunay เพื่อจับคู่โครงร่าง - บ่อยครั้งที่ Delaunay สามารถวางสามเหลี่ยม (สีเทา) ไม่ตรงกับโครงร่างของคุณ (สีแดง) จากนั้นคุณต้องตรวจจับและพลิกมัน ติดกับพวกมันกลับไปเป็นรูปหลายเหลี่ยมแยกมันออกมาเป็นโครงร่างและหามันด้วยตนเอง ป้อนคำอธิบายรูปภาพที่นี่
  6. สิ่งกีดขวางอวัยวะภายใน - ลบรูปหลายเหลี่ยมที่อยู่ภายในสิ่งกีดขวาง (สีชมพูในภาพด้านบน)
  7. กรอกข้อมูลการเชื่อมต่อระหว่างสามเหลี่ยมที่เหลือและจุดยอดที่คุณต้องการนั่นคือ navmesh ของคุณ

ผลลัพธ์:

tilemap navmesh


1

โดยทั่วไปเมชจะถูกนำไปใช้เป็นกราฟ หากคุณต้องการใช้การค้นหาเส้นทางในแผนที่โดยยึดตามกริดให้ทำดังต่อไปนี้:

สร้างกราฟที่แต่ละสี่เหลี่ยมจัตุรัส traversable แทนเป็นจุดสุดยอด แต่ละคู่ของสี่เหลี่ยมจัตุรัสสำรวจผ่านได้ที่อยู่ติดกันแสดงเป็นจุดยอดจะมีขอบระหว่างพวกเขา และคุณทำเสร็จแล้ว


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

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