การย้ายวัตถุไปตามเส้นโค้งในขณะที่หมุน


11

ฉัน woud ต้องการที่จะย้ายวัตถุไปตามเส้นโค้ง ที่จุดใดจุดหนึ่งบนเส้นโค้งฉันต้องการให้วัตถุเปลี่ยนความเร็วและหมุนตัวเองไปตามแกนของมัน

ลองนึกภาพเครื่องบินที่บินไปยังปลายทาง มันมีเส้นทางที่มันจะต้องปฏิบัติตามรวมถึงจะปรับความเร็วและทิศทางของมันตลอดทาง (หัวเรื่อง, แก่น, ธนาคาร)

ฉันขอข้อมูลเริ่มต้นได้จาก:

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

หากคุณรู้เกี่ยวกับหนังสือที่ครอบคลุมหัวข้อนี้อย่างมีประสิทธิภาพนั่นจะเป็นหนังสือที่ดีที่สุด ขอขอบคุณ.

คำตอบ:


7

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

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

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

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

หากคุณต้องการทิศทางที่กำหนดเองที่ไม่มีส่วนเกี่ยวข้องกับเส้นทางคุณสามารถระบุรายชื่อของการปฐมนิเทศสำหรับเรื่องนี้ได้ จากนั้นคะแนนของคุณจะกลายเป็น (จุด, ความเร็ว, ควอเทอร์เนียน) จากนั้นคุณสามารถใช้ slerp ระหว่าง quaternions ต่อเนื่องสองชุดเพื่อกำหนดทิศทางของคุณไปพร้อมกัน อย่าลืมว่า slerp เป็นวิธีการแก้ไขเชิงเส้น อย่างไรก็ตามมันควรจะดี หากคุณพบว่าผลัดจะไม่เรียบเพียงพอในตะเข็บคุณสามารถลอง interpolating รายการ quaternions กับเส้นโค้ง Bezier ตามที่อธิบายที่นี่ในมาตรา 7

นี่คือซอร์สโค้ดบางตัวที่สามารถช่วยคุณเริ่มต้นใช้งาน มันมีเทคนิคการแก้ไขจำนวนมากที่ราบรื่นสำหรับรายการ quaternions (ทีม, bezier, ฯลฯ )

แจ้งให้เราทราบหากคุณมีข้อสงสัย!


+1 - ขอบคุณคำตอบของคุณครอบคลุมทุกอย่าง มันตอบทุกคำถามที่ฉันถามรวมถึงคุณเตรียมสื่อการเรียนรู้เพิ่มเติม ตอนนี้ฉันมีเนื้อหาเพียงพอที่จะเริ่มต้นด้วย ดังนั้นฉันไม่เห็นเหตุผลที่จะไม่ทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับได้
Bunkai.Satori

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