เอนจิ้นฟิสิกส์ที่สามารถรองรับตัวดึงดูดได้หลายตัว?


9

ฉันรวบรวมเกมที่จะเล่นเป็นส่วนใหญ่ด้วยแรงโน้มถ่วงสามมิติ

โดยที่ฉันหมายถึงดาวเคราะห์ / ดวงดาว / ดวงจันทร์หลายตัวประพฤติตามความเป็นจริงและการวางแผนเส้นทางและการทำนายเส้นทางในสนามโน้มถ่วง

ฉันได้ดูเครื่องยนต์ฟิสิกส์หลากหลายชนิดเช่นBullet , tokamakหรือNewtonแต่ดูเหมือนว่าไม่มีพวกมันที่เหมาะสมเพราะฉันจะต้องเขียนกลไกแรงโน้มถ่วงอีกครั้งในกรอบของมัน

คุณรู้หรือไม่ว่าเครื่องยนต์ฟิสิกส์ที่มีความสามารถในการจัดการกับวัตถุต่าง ๆ ดึงดูดกันได้หรือไม่?

ฉันไม่ต้องการการจัดการ Scenegraph หรือการเรนเดอร์แค่ฟิสิกส์หลัก (การตรวจจับการชนจะเป็นโบนัสเช่นเดียวกับการเปลี่ยนแปลงของร่างกายที่แข็งแกร่ง)


พื้นหลังของฉันอยู่ในวิชาฟิสิกส์ดังนั้นฉันจะสามารถเขียนเครื่องยนต์ที่ใช้การรวม Verlet หรือ RK4 (หรือแม้แต่การรวมออยเลอร์ถ้าฉันต้อง) แต่ฉันค่อนข้างจะปรับตัวออกจากชั้นวางของโซลูชั่น

[แก้ไข]:มีแหล่งข้อมูลที่ยอดเยี่ยมสำหรับการจำลองทางฟิสิกส์ของปัญหาร่างกายแบบออนไลน์และในสแต็คโอเวอร์โฟลว์


7
คุณไม่สามารถใช้กระสุนและไม่ใช้แรงโน้มถ่วงตามมาตรฐานได้หรือไม่? (เช่นหลีกเลี่ยงการเรียกใช้ Apply Gravity เรียก SetGravity ด้วยเวกเตอร์ที่เป็นศูนย์ใช้ BT_DISABLE_WORLD_GRAVITY ... ) เพียงเพราะเอฟเฟกต์ที่คุณต้องการเกิดขึ้นในรูปแบบของแรงโน้มถ่วงไม่ได้หมายความว่าคุณต้องสามารถผ่าน API "แรงโน้มถ่วง" ของ เครื่องยนต์ฟิสิกส์พื้นฐาน
Neverender

คุณสามารถใช้สปริงผกผันบางชนิดได้
Roy T.

1
@RoyT ฤดูใบไม้ผลิต่อ se มีแรงตามสัดส่วนกับ d ในขณะที่แรงโน้มถ่วงเป็น d ^ (- 2) (ไม่แม้แต่ d ^ (- 1)) คุณสามารถได้รับวงโคจรจากทั้งสอง แต่มีลักษณะแตกต่างกันมาก หากคุณแค่หมายถึง“ ใช้ข้อ จำกัด ตามระยะทางที่ได้รับจากเครื่องยนต์” แล้วใช่ - ถ้ามันมีผกผันสแควร์
Kevin Reid

@KevinReid คุณอาจพูดถูก แต่ฉันไม่แน่ใจว่าฉันได้รับคำอธิบายของคุณหรือไม่ คุณหมายถึงแรงสปริงจะขึ้นอยู่กับระยะทางและแรงโน้มถ่วงขึ้นอยู่กับสี่เหลี่ยมจัตุรัสหรือไม่?
รอยต.

1
Osmos เป็นเกมเล็ก ๆ ที่ยอดเยี่ยม ดีที่สุดที่ฉันสามารถหาได้นี้สัมภาษณ์
Brice

คำตอบ:


2

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

คุณอาจจะดึงเครื่องมือฟิสิกส์ออกมาจาก Stellarium หรือแพ็คเกจทางดาราศาสตร์อื่น ๆ

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


จริงๆแล้วลองแก้ปัญหาตัว N คุณจะได้วงโคจรที่เสถียร ขึ้นอยู่กับวิธีการรวมระบบของคุณ ฉันจัดการวงโคจรที่เสถียรด้วย verlet และ RK4
ไบรส์

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

วิธีที่จะทำให้วงโคจรคงที่สำหรับบันทึกนั้นคือการสร้างระบบสมมาตร ยิ่งไปกว่านั้นไทม์เซลส์สำหรับความไม่แน่นอนนั้นมีความยาวมากกว่าความยาวของเกมโดยเฉลี่ย (ไม่แน่นอนมากกว่า 100s ถึง 1,000s ของวงโคจรดาวเคราะห์ในขณะที่เกมจะไม่นานกว่า 4/5)
brice

สำหรับตัวอย่างของวงโคจรที่มั่นคงลองดูที่นี่ (ใช้ Verlet)
ราคา

1

มีข้อ จำกัด ของแพลตฟอร์มหรือไม่? เพราะPhysXจาก nVidia มีสิ่งที่คุณกำลังมองหาและอื่น ๆ


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