ฉันสงสัยว่าการชนในเกมแข่งรถ 3 มิติแบบเรียบง่ายทำได้อย่างไร (โดยเฉพาะในเกมอย่าง Outrun 2 / Motoracer)
ในเกมแข่งรถคลาสสิกที่มีสภาพแวดล้อมที่ซับซ้อน (โลกเปิด) ฉันคิดว่านี่เป็นกล่องพื้นฐาน (สำหรับรถยนต์) เพื่อชนเครื่องบิน (สำหรับแทร็ก สิ่งทั้งหมดจะได้รับการปรับให้เหมาะสมโดยใช้กล่องขอบเขต (นี่คือวิธีการชนกันของเกมในหลาย ๆ เกม)
ในเกมอย่าง Outrun 2 / Motoracer การเล่นเกมนั้นง่ายมากที่ผู้พัฒนาอาจไม่ต้องการและทุกอย่างก็ง่ายขึ้นมาก สำหรับผู้ที่ไม่เคยเล่นนี่คือสิ่งที่เฉพาะเจาะจงมาก:
- รถยนต์ / จักรยานติดอยู่บนถนนเสมอ
- ถนนมีขนาดเท่ากันเสมอและมีรูปร่างที่เรียบง่ายมาก
- ความเป็นไปได้เพียงอย่างเดียวคือเดินไปตามถนนนั้นเป็นไปไม่ได้ที่จะออกจากถนนหรือปะทะกับสิ่งอื่น (ยกเว้นรถยนต์ / มอเตอร์ไซค์อื่น ๆ แต่เราไม่สนใจ)
- เมื่อคุณชนกับถนนการชนกันของอาร์เคดขั้นพื้นฐานก็ทำได้ (รถถูกผลักออกไปจากมัน)
นี่คือวิธีที่ฉันคิดว่ามีการปะทะกัน (อาจ):
เพลงทั้งหมดอาจถูกมองว่าเป็นเส้นโค้ง 3 มิติที่มีขนาดใหญ่ขึ้น จากเส้นโค้งนั้นสามารถสร้างรูปหลายเหลี่ยมของถนนได้ (โดยใช้เวกเตอร์ด้านหน้าซ้ายและสูงที่สร้างจากเส้นโค้ง) องค์ประกอบอื่น ๆ (เช่นบ้านต้นไม้ ... ) สามารถวางและจัดตำแหน่งโดยใช้วิธีนี้ได้เช่นกัน
จากนั้นจัดการกับการชน (และดึงรถ):
1) ค้นหาตำแหน่งที่ใกล้เคียงที่สุดบนเส้นโค้ง 3 มิติจากตำแหน่งรถ 3 มิติปัจจุบัน กล่าวอีกนัยหนึ่งเปลี่ยนตำแหน่งรถ 3 มิติให้เป็นตำแหน่งเส้นโค้งที่ดี ทุกตำแหน่ง 3 มิติบนท้องถนนอาจถือได้ว่าเป็นการกระจัดไปตามเส้นโค้ง 3 มิติ ( t
) + การกระจัดด้านข้าง ( d
) ตรวจสอบภาพด้านล่างหากไม่ชัดเจน (นี่เป็นตัวอย่าง 2d แต่สิ่งนี้ใช้ได้กับ 3d ได้อย่างง่ายดาย)
เมื่อ t = 0 รถอยู่ที่ส่วนเริ่มต้นของแทร็กเมื่อ t = 1 รถอยู่ที่จุดสิ้นสุด เมื่อ d = -1 หรือ 1 รถอยู่ที่ขอบของแทร็กเมื่อ d = 0 รถอยู่ตรงกลางถนน
2) จัดรถให้ตรงกับถนนโดยใช้t
และd
(ง่ายมาก: สำหรับค่าใด ๆt
และd
ค่าฉันสามารถรับตำแหน่ง 3 มิติ + เวกเตอร์ขึ้น / ด้านหน้า / ซ้าย) ตอนนี้รถติดอยู่บนถนน
3) ตรวจสอบการเคลื่อนที่ด้านข้างd
ของรถยนต์ หากค่ามีขนาดใหญ่เกินไป(d > 1)
หรือ(d < -1)
รถต่ำอยู่นอกเส้นทาง เพียงแค่คลิปมันเพื่อวางรถในตำแหน่งที่ถูกต้อง
นอกจากนี้ยังทำให้ 3d เลือกสรรง่ายมากเพียงแค่วาดติดตามจากรถปัจจุบันตำแหน่งที่จะt
t + some_big_enough_value_to_avoid_visible_clipping
หรือบางทีฉันผิดอย่างสมบูรณ์:มันเร็วกว่าและง่ายกว่ามากในการตรวจสอบการชนของรถ (กล่องที่มีขอบเขต) และชุดรูปหลายเหลี่ยมที่เรียบง่ายมากซึ่งเป็นตัวแทนของแทร็ก โลก 3 มิติ (และโมเดล colision ที่เกิดขึ้น) จะถูกสร้างขึ้นก่อนหน้านี้โดยใช้เครื่องมือของบุคคลที่สาม (ไม่ต้องโค้ง 3 มิติอีกต่อไปเมื่อใช้งานเกม