สุดยอดวิธีการใช้งาน Collision แบบ 3 มิติที่ดีที่สุด


16

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

ฉันต้องการมีเทคนิคที่ดีในการวนรายการทั้งหมดของฉันในโลก 3 มิติ

คำตอบ:


11

คุณจะต้องมีขั้นตอนวิธีการแบ่งพื้นที่ที่ดีที่ใช้กันทั่วไปในแบบ 3 มิติมีoctrees

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

ดูภาพนี้: ทรงกลมหลายขอบเขต


12

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

มันช่วยให้ฉันทำตามขั้นตอนเด็กก่อนที่จะพยายามสร้างระบบที่ยิ่งใหญ่ การเขียนฟังก์ชั่นเพื่อตรวจสอบว่าจุดหนึ่งอยู่ในระนาบหรือไม่ถ้าหากจุดนั้นอยู่ในรูปสามเหลี่ยมถ้ารังสีอยู่ในรูปสามเหลี่ยม ฯลฯ จากนั้นเคลื่อนที่ไปยังการทดสอบสถิตของของแข็งชนิดต่างๆ: AABB vs. สามเหลี่ยม ฯลฯ ด้วย สิ่งที่เวลาที่ดูเหมือนไม่ยอมรับ (ยกโทษให้ปุน) ในตอนแรกก็กลายเป็นที่น่ากลัวน้อยลง นี่คือรายการของการทดสอบจำนวนมากพร้อมโค้ดตัวอย่าง:

http://www.realtimerendering.com/intersections.html

ในระหว่างนี้เนื่องจากฉันรู้ว่าทุกคนไม่สามารถแยกหนังสือที่ต้องการได้ 70-80 $ ต่อไปนี้เป็นคำศัพท์บางคำที่คุณอาจต้องการพิจารณา:

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