ฉันจะจัดการกับสิ่งเล็ก ๆ ในเครื่องยนต์ฟิสิกส์ได้อย่างไร?


13

ฉันกำลังสร้างเอ็นจิ้นฟิสิกส์ 3 มิติเพื่อขว้างลูกเต๋า จนถึงปัจจุบันลูกเต๋ามี 1x1x1m และแรงโน้มถ่วงมีค่า 9.82 m / s ^ 2 แน่นอนว่านี่ดูไม่เหมือนจริงเพราะลูกเต๋าจะตอบสนองทุกอย่างในแบบที่ดูช้าไปหน่อย

เพื่อแก้ไขปัญหานี้ฉันพยายามที่จะเปลี่ยนทุกขนาดเพื่อให้ลูกเต๋าอยู่ด้านข้าง 0.02m ในทางกลับกันมันทำให้มวลผกผันและเมทริกซ์ความเฉื่อยผกผันของฉันได้รับค่ามากซึ่งนำไปสู่ความไม่แน่นอนเชิงตัวเลข

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

ฉันเดาว่าปัญหาเดียวกันอาจเกิดขึ้นได้หากคุณสร้างเกมที่มีร่างกายใหญ่โตอย่างยานอวกาศหรืออะไรบางอย่างดังนั้นฉันหวังว่าจะมีบางคนที่พบเจอสิ่งที่คล้ายกันมาก่อน


ฉันไม่มีความเชี่ยวชาญที่นี่ แต่หากไม่มีรหัสใด ๆ เราจะรู้ได้อย่างไรว่าปัญหาคืออะไร ฉันอาจจะผิด แต่เป็น Box2D มีปัญหาเดียวกัน
jcora

1
(เห็น upvotes ทั้งหมดจะต้องมีวิธีการทั่วไปของการเข้ารหัสสิ่งเหล่านี้และคนที่ดูเหมือนจะรู้ว่าสิ่งที่คุณมีปัญหาผมคิดว่าผมเป็นคนผิด..)
jcora

1
ใช่ฉันคิดว่าอาจมีวิธีการทั่วไปในการจัดการกับมัน อย่างที่ฉันเห็นนี่ไม่ใช่ปัญหารหัส แต่เป็นปัญหาเกี่ยวกับความแม่นยำเชิงตัวเลข สิ่งที่ฉันเป็นหลังจากนั้นไม่ใช่ข้อมูลโค้ดเพื่อแก้ไขปัญหาของฉัน แต่เป็นคำอธิบายวิธีการแก้ไขปัญหา
Mikael Högström

คุณหมายถึงความแม่นยำจุดลอยตัว?
jcora

ในความรู้สึกใช่ ค่าผกผันของเมทริกซ์ความเฉื่อยที่ฉันใช้ในการจัดการการชนมีค่ามาก จริง ๆ แล้วมันไม่ได้มีสภาพที่ไม่ดีนักเนื่องจากองค์ประกอบของเดือยได้รับค่ามากและไม่มีการเพิ่มเติมเกิดขึ้น แต่อย่างใดต้องมีปัญหากับความแม่นยำเชิงตัวเลขเนื่องจากการจำลองหมุนอย่างรวดเร็วนอกการควบคุม
Mikael Högström

คำตอบ:


1

คุณทำได้

  • เพิ่มแรงโน้มถ่วงคงที่หรือไม่ เกมมักใช้ 2 * 9.81 m / s ^ 2 จำไม่ได้ว่าฉันอ่านตรงไหน แต่เกมใช้หน่วยที่ไม่มีความรู้สึก ค่าคงที่ใดก็ตามที่รู้สึกถูกต้อง (ทำให้เกมสนุก) การใช้ค่าคงที่สมจริงทำให้ฟิสิกส์ดูเหมือนช้าและลอยตัว
  • เรียกใช้การจำลองในอัตราที่เร็วขึ้น หากคุณใช้การประทับเวลาคงที่นี่จะเพิ่มอัตราการเคลื่อนไหว
  • ใช้ความแม่นยำที่สูงขึ้นหรือไม่

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

1
เกมมักใช้แรงโน้มถ่วงสองเท่าหรือไม่ พูดว่าใคร
GameDev-er

ฉันไม่สามารถเปลี่ยนอัตราหรือความแม่นยำ แต่ฉันจะลองเปลี่ยนแรงโน้มถ่วง
Mikael Högström

การเปลี่ยนค่าคงที่แรงโน้มถ่วงทำให้ลูกเต๋าเคลื่อนที่เร็วขึ้นโดยทั่วไปทำให้รู้สึกว่าทุกอย่างมีขนาดเล็กลง สิ่งนี้ทำให้พฤติกรรมกระวนกระวายใจมากขึ้นแม้ว่าจะมี microcollisions เพื่อรองรับการเร่งความเร็วระหว่างเฟรม ฉันเดาว่าฉันจะต้องปรับแต่ง :)
มิคาเอลHögström

4

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

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

วิธีที่สองนั้นเหมือนกัน แต่คุณไม่ต้องคิดถึงหน่วยที่แท้จริง

ทำไมคุณไม่เปลี่ยนมวลของลูกบาศก์ด้วย?


เนื่องจากเครื่องกำเนิดไฟฟ้าที่บังคับเท่านั้นที่ฉันมีคือการเปลี่ยนมวลแรงโน้มถ่วง / ความเร่งโดยไม่เปลี่ยนพฤติกรรม ข้อเสนอแนะของคุณสามารถนำมาใช้ในทางตรงกันข้ามแม้ว่า (อาจเป็นสิ่งที่คุณหมายถึง) ให้วัตถุขนาดเล็กที่มีขนาดใหญ่กว่าทำให้มวลผกผันของพวกเขาเข้าใกล้วัตถุมากขึ้นและลดความไม่แน่นอนเชิงตัวเลข สิ่งนี้ให้ประเด็นเดียวกันกับการเพิ่มค่าคงที่แรงโน้มถ่วง
Mikael Högström

2

กระสุนห้องสมุดฟิสิกส์มีหน้าวิกิพีเดียเกี่ยวกับการปรับโลกฟิสิกส์ ข้อมูลนี้อาจเป็นประโยชน์กับเครื่องยนต์ฟิสิกส์อื่น ๆ เช่นกัน


0

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

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

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