คำถามติดแท็ก physics-engine

ซอฟต์แวร์สำหรับการจำลองฟิสิกส์เช่นการชนแรงมวลข้อต่อการเคลื่อนที่เป็นต้นตัวอย่างของเครื่องยนต์ฟิสิกส์ ได้แก่ PhysX, Havok, Bullet และ ODE


8
ฉันจะทำการจำลองทางฟิสิกส์ที่กำหนดขึ้นได้อย่างไร
ฉันกำลังสร้างเกมฟิสิกส์ที่เกี่ยวข้องกับวัตถุแข็งเกร็งซึ่งผู้เล่นเคลื่อนย้ายชิ้นส่วนและชิ้นส่วนเพื่อไขปริศนา / แผนที่ สิ่งสำคัญอย่างยิ่งของเกมคือเมื่อผู้เล่นเริ่มทำการจำลองสถานการณ์มันจะทำงานแบบเดียวกันทุกที่โดยไม่คำนึงถึงระบบปฏิบัติการตัวประมวลผลและอื่น ๆ ... มีห้องสำหรับความซับซ้อนจำนวนมากและการจำลองอาจทำงานเป็นเวลานานดังนั้นจึงเป็นเรื่องสำคัญที่เอนจิ้นฟิสิกส์จะกำหนดอย่างสมบูรณ์เกี่ยวกับการทำงานของจุดลอยตัวมิฉะนั้นวิธีแก้ปัญหาอาจปรากฏขึ้นเพื่อ "แก้ปัญหา" บนเครื่องของผู้เล่นคนหนึ่งและ "ล้มเหลว" กับอีกรายการหนึ่ง ฉันจะบรรลุระดับนี้ในเกมของฉันได้อย่างไร ฉันยินดีที่จะใช้กรอบและภาษาที่หลากหลายรวมถึง Javascript, C ++, Java, Python และ C # ฉันถูกล่อลวงโดย Box2D (C ++) เช่นเดียวกับภาษาอื่นที่เทียบเท่าเนื่องจากดูเหมือนว่าจะตอบสนองความต้องการของฉัน แต่มันขาดการกำหนดจุดลอยตัวโดยเฉพาะอย่างยิ่งกับฟังก์ชันตรีโกณมิติ ตัวเลือกที่ดีที่สุดที่ฉันเคยเห็นมาแล้วนั้นเทียบเท่ากับ Java ของ Box2D (JBox2D) ดูเหมือนจะใช้ความพยายามในการกำหนดระดับจุดลอยตัวโดยใช้StrictMathมากกว่าMathสำหรับการใช้งานหลายอย่าง แต่ก็ไม่มีความชัดเจนว่าเอ็นจิ้นนี้จะรับประกันทุกสิ่งที่ฉันต้องการเพราะฉันยังไม่ได้สร้างเกม เป็นไปได้ที่จะใช้หรือดัดแปลงเอ็นจิ้นที่มีอยู่เพื่อให้เหมาะกับความต้องการของฉันหรือไม่? หรือฉันจะต้องสร้างเครื่องยนต์ด้วยตัวเอง? แก้ไข: ข้ามส่วนที่เหลือของโพสต์นี้ถ้าคุณไม่สนใจว่าทำไมใครบางคนถึงต้องการความแม่นยำเช่นนี้ บุคคลในความคิดเห็นและคำตอบดูเหมือนจะเชื่อว่าฉันกำลังมองหาบางสิ่งที่ฉันไม่ควรทำเช่นนี้ฉันจะอธิบายเพิ่มเติมเกี่ยวกับวิธีการทำงานของเกม ผู้เล่นจะได้รับจิ๊กซอว์หรือระดับซึ่งมีอุปสรรคและเป้าหมาย เริ่มแรกการจำลองไม่ทำงาน จากนั้นพวกเขาสามารถใช้ชิ้นส่วนหรือเครื่องมือที่ให้ไว้เพื่อสร้างเครื่องจักร เมื่อพวกเขากดเริ่มการจำลองจะเริ่มขึ้นและพวกเขาจะไม่สามารถแก้ไขเครื่องได้อีกต่อไป หากเครื่องแก้แผนที่ผู้เล่นได้เอาชนะระดับ ไม่เช่นนั้นพวกเขาจะต้องกดหยุดปรับเปลี่ยนเครื่องแล้วลองอีกครั้ง เหตุผลที่ทุกอย่างจำเป็นต้องกำหนดขึ้นเพราะฉันวางแผนที่จะสร้างรหัสที่จะแมปเครื่องทุกเครื่อง (ชุดของชิ้นส่วนและเครื่องมือที่พยายามแก้ปัญหาระดับ) ไปยังไฟล์ xml หรือ …

6
ฉันจะสร้างเอนจินฟิสิกส์ 2D ได้อย่างไร [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน6 ปีที่ผ่านมา เกมที่ทันสมัยที่สุดที่ฉันทำคือเกมพูล 8 ลูกที่สร้างด้วยเครื่องมือฟิสิกส์ Box2dFlashAS3 และเกมแพลตฟอร์มที่มีเลเวล เมื่อฉันทำเกมแพลตฟอร์มฉันมักจะอยากรู้วิธีสร้างเครื่องยนต์เพื่อที่ฉันจะได้ใช้มันได้อีกครั้ง เมื่อฉันเห็นเกมที่มีทางลาดเอียงโค้งแรงโน้มถ่วงที่สมบูรณ์แบบและฟิสิกส์ในชีวิตจริงฉันหวังเสมอว่าฉันรู้วิธีการเขียนโปรแกรม โปรดแนะนำเทคนิคและบทความสำหรับฐานความรู้ที่เกี่ยวข้องที่จำเป็น

7
เอ็นจินฟิสิกส์แบบ 2D / 3D ที่รู้จักกันดีสำหรับ XNA คืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังมองหาเอ็นจิ้นฟิสิกส์ที่จะใช้ในโครงการ XNA (2D หรือ 3D) เพราะสำหรับ XNA นั้นจะต้องตอบสนองความต้องการบางประการ: ไม่จำเป็นว่าฟรี แต่ใกล้เคียงกับมันชัดกว่า รหัสที่ได้รับการจัดการเท่านั้น (หรือจะไม่ทำงานใน 360) สำหรับ 3D ที่ฉันรู้จัก - BulletX (ใช้งานได้และฉันใช้งานตอนนี้ แต่มันไม่ทำงานและสามารถใช้งานได้มากกว่า) สำหรับ 2D ฉันรู้ - Farseer
20 c#  xna  physics-engine 

4
มีเอนจิ้นฟิสิกส์ 3D ของ open source อย่างใดอย่างหนึ่งอยู่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังทำงานในเกม 3D FPS บนเว็บโดยใช้ WebGL, HTML5 และ JavaScript ควรกำหนดเป้าหมายพีซีและเน็ตบุ๊กที่ติดตั้งเบราว์เซอร์ที่เปิดใช้งาน WebGL ฉันสงสัยว่ามีเอ็นจินฟิสิกส์ 3D แบบโอเพ่นซอร์สที่มีอยู่ที่เขียนด้วย JavaScript หรือไม่?

5
ทำไมต้องรวมกันมากกว่าการสะสม?
ฉันเริ่มเรียนรู้วิธีการทำฟิสิกส์แบบ DIY และฉันมีคำถามเกี่ยวกับการนำการบูรณาการมาใช้ในระดับพื้นฐานที่สุด (เช่นนี่ไม่ใช่คำถามของออยเลอร์กับ RK4) เกือบทุกตัวอย่างที่ฉันเจอมีintegrate()ฟังก์ชั่นบางอย่างที่ได้รับการประทับเวลาตั้งแต่การอัปเดตครั้งล่าสุดและอัปเดตการเร่งความเร็ว (และ / หรือความเร็วและ / หรือตำแหน่ง) ตั้งแต่การอัปเดตครั้งล่าสุด ในรูปแบบที่ง่ายที่สุด: position += velocity * deltaTime แต่ผมไม่เข้าใจว่าทำไมมันสะสมเช่นนี้เมื่อมันสามารถได้อย่างง่ายดายเพียงได้รับอากาศโดยเปลี่ยนฟังก์ชั่น ตัวอย่างเช่น: getPosition = makeNewFunction()ซึ่งสามารถคืนสิ่งที่มีลายเซ็นTime -> Positionและผลงานภายในของฟังก์ชันนั้นถูกสร้างขึ้นผ่านสูตรทางคณิตศาสตร์ที่เหมาะสม ด้วยวิธีนี้ไม่มีการสะสม ... เมื่อใดก็ตามที่ต้องได้รับตำแหน่งมันจะเรียกฟังก์ชันนั้นตามเวลาปัจจุบัน การทำความเข้าใจเกี่ยวกับมือใหม่ของฉันคือการที่จะหลีกเลี่ยงข้อผิดพลาดที่เกิดจากการสะสม ... ดังนั้นทำไมมันไม่ทำงานฉันจะพลาดอะไร (fwiw ฉันได้รวบรวมหลักฐานพื้นฐานของแนวคิดของความคิดนี้ - แม้ว่ามันจะทดสอบสิ่งอื่น ๆ ในเวลาเดียวกันดังนั้นมันจึงไม่ใช่ตัวอย่างที่สะอาดที่สุด: https://github.com/dakom/ball-bounce-frp ) แก้ไข 1:ดังที่กล่าวไว้ในความคิดเห็นอาจเป็นสิ่งสำคัญที่ชี้ให้เห็นว่าฉันยังไม่ได้เรียนรู้เกี่ยวกับการเปลี่ยนการเร่งความเร็วหรือการจัดการกับกระตุกและสิ่งอื่น ๆ ที่ต้องมีการรวมลำดับสูงกว่าเร่งความเร็วคงที่ แก้ไข 2:นี่คือตัวอย่างโค้ดพื้นฐานของแนวคิดและไวยากรณ์ javascript หลอก - โปรดทราบว่าgetKinematicPositionมีการใช้งานบางส่วนดังนั้นจึงส่งคืนฟังก์ชันใหม่ในเวลาเพียง -> …

3
การตรวจจับการชนกันเป็น O เสมอ (n ^ 2)
เครื่องยนต์ฟิสิกส์สามารถลดความซับซ้อนนั้นได้หรือไม่โดยการจัดกลุ่มวัตถุที่อยู่ใกล้กันและตรวจสอบการชนภายในกลุ่มนี้แทนที่จะเทียบกับวัตถุทั้งหมดหรือไม่ (ตัวอย่างเช่นวัตถุที่อยู่ไกลสามารถลบออกจากกลุ่มโดยดูที่ความเร็วและระยะทางจากวัตถุอื่น) ถ้าไม่นั่นทำให้เกิดการปะทะกันเล็กน้อยสำหรับทรงกลม (ใน 3d) หรือดิสก์ (เป็น 2d) หรือไม่ ฉันควรสร้างวงคู่หรือสร้างอาร์เรย์ของคู่แทน? แก้ไข: สำหรับเครื่องยนต์ฟิสิกส์เช่นกระสุนและ box2d การตรวจจับการชนยังคงเป็น O (N ^ 2) หรือไม่

3
การแก้ไขการชนกับกองกำลัง
ในเอนจินฟิสิกส์ 2D ของฉันฉันสามารถตรวจจับการชน AABB กับ AABB และแก้ไขพวกมันได้โดยการหาเวกเตอร์การสอดใส่ที่สั้นที่สุดและเพิ่มลงในตำแหน่งของ AABB การทำเช่นนี้จะ "ผลัก" AABB ตัวแรกนอก AABB ตัวที่สอง แต่ไม่ได้เกี่ยวข้องกับการเปลี่ยนแปลงความเร็ว / การเร่งความเร็วเลย ถ้าฉันเพิ่มการเร่งความเร็วด้วยแรงโน้มถ่วงกับการจำลองความเร็วของไดนามิก AABB แรกยังคงเพิ่มขึ้นแม้ว่าจะวางอยู่บน AABB สถิตที่สอง ในที่สุดความเร็วจะใหญ่เกินไปและไม่สามารถตรวจพบการชนกันได้ (ไดนามิก AABB จะตกลงไปในภาพนิ่ง) ฉันพยายามตั้งค่าความเร็วเป็นศูนย์หลังจากการแก้ปัญหา แต่เห็นได้ชัดว่าใช้งานไม่ได้ดีและสร้างแบบจำลองที่ไม่สมจริง ฉันอ่านออนไลน์ที่แก้ไขการชนโดยการทำงานกับตำแหน่งด้วยตนเองหรือความเร็วไม่ถูกต้อง ฉันพยายามใช้กองกำลัง (มวลคือ "hardcoded" 1 สำหรับตอนนี้): void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; } void Body::integrate(float mFrameTime) { velocity += acceleration * …

1
มีเอ็นจิ้นฟิสิกส์ 3D แบบโอเพนซอร์สแบบจุดคงที่หรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ฉันกำลังมองหาเอ็นจิ้นฟิสิกส์แบบสามมิติแบบจุดคงที่ (kynematics ขั้นพื้นฐานและความละเอียดการตรวจจับการชนกันของข้อมูล ... ไม่มีอะไรแฟนซีเกินไป) ฉันต้องการคณิตศาสตร์จุดคงที่เพราะฉันต้องการให้มีผลลัพธ์ที่กำหนดได้เพื่อวัตถุประสงค์ในการทำซ้ำและพกพาได้สูงเพราะฉันคาดหวังว่าเกมของฉันจะพกพาได้สูงสำหรับอุปกรณ์ต่าง ๆ เช่นโทรศัพท์มือถือหรือเครื่องเล่นเกมพกพา

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

3
คำแนะนำที่จำเป็นสำหรับเครื่องยนต์ฟิสิกส์
ฉันเพิ่งเริ่มโครงการสร้างเครื่องมือฟิสิกส์ ฉันหวังว่าคุณจะสามารถให้คำแนะนำเกี่ยวกับเอกสารและ / หรือเทคโนโลยีที่ดีที่สุดให้ฉันได้ ก่อนอื่นฉันได้เห็นแล้วว่าการพัฒนาเกม - ฟิสิกส์ - เครื่องยนต์ - การพัฒนานั้นเหมาะสำหรับงานที่ทำอยู่และฉันก็สงสัยว่าคุณจะให้ความเห็นที่สองกับฉันได้ไหม นอกจากนี้ในขณะที่กำลังดู Amazon ฉันได้สะดุดกับ Game Engine Architectureและเนื่องจากฉันต้องการสร้างเอ็นจิ้นฟิสิกส์สำหรับเกมฉันคิดว่านี่อาจเป็นสิ่งที่ดีสำหรับการอ่าน ข้อสองฉันรู้ว่าการจำลองฟิสิกส์นั้นใช้การคำนวณอย่างเข้มข้นดังนั้นฉันจึงอยากใช้ CUDA หรือ OpenCL ตอนนี้ฉันกำลังใช้ OpenCL อยู่เพราะมันจะใช้ได้กับทั้ง NVIDIA และ ATI chipsets คุณแนะนำอะไร? PS: ฉันจะใช้สิ่งนี้ใน C ++ บน Linux

1
ฉันจะรวมกระสุนฟิสิกส์เข้ากับเกมของฉันได้อย่างไร
ฉันดาวน์โหลดไฟล์รีลีสที่นี่แต่ฉันไม่แน่ใจว่าจะเริ่มจากตรงไหน ในเกมของฉันฉันมีรูปสี่เหลี่ยมผืนผ้าจำนวนหนึ่งและทรงกลมฉันต้องการให้สิ่งเหล่านี้ชนกัน (พวกเขาทั้งหมดมีตาข่ายและปริมาณการเชื่อมโยงที่เกี่ยวข้อง) แก้ไข - ฉันเพิ่งรู้ว่าลูกบาศก์จริง ๆ แล้วมี AABB เกี่ยวข้องกับพวกเขา ฉันเดาว่าฉันจะต้องเปลี่ยนอย่างน้อย ฉันต้องทำตามขั้นตอนอะไรบ้าง?

3
ฉันจะแก้ไขวัตถุ“ popping” หรือ jittering ในเอ็นจินฟิสิกส์ได้อย่างไร
ฉันมีเครื่องมือฟิสิกส์อย่างง่ายที่แก้ปัญหาการชนโดยเพียงแก้ไขตำแหน่งของวัตถุที่ทับซ้อนกัน (เพิ่งเป็นวงกลมในตอนนี้) โดยตรงเมื่อเทียบกับการเปลี่ยนความเร็วหรือการใช้แรงกระตุ้น ความเร็วจะเปลี่ยนหลังจากแก้ไขผลกระทบแล้วหรือระหว่างส่วนการรวม ฉันมีปัญหาว่าในกองวัตถุวัตถุบนสุดใช้แรงกดดันมากเกินไป (สิ่งนี้มีอยู่โดยปริยายไม่มีการสร้างแบบจำลองแรงกดดันในอัลกอริทึม) บนวัตถุที่ด้านล่างของกองซึ่งส่งผลให้พวกมันถูกผลักผ่านพื้น เป็นต้น ฉันต้องการแก้ไขสิ่งนี้โดยการเรียงลำดับวัตถุตามพิกัด y ของพวกเขาดังนั้นการชนจึงได้รับการแก้ไขจากล่างขึ้นบน แต่ตอนนี้เอ็นจิ้นแสดงพฤติกรรมการเต้นแปลก ๆ สำหรับวัตถุที่ควรจะพัก (ดู gif) หากไม่ได้ให้ซอร์สโค้ดแก่คุณคุณจะทำอย่างไร

3
การคำนวณความเฉื่อยเทนเซอร์
คำถามที่ซับซ้อนและยาวนิดหน่อยที่ฉันจะยอมรับฉันยังไม่ค่อยเข้าใจดีนักดังนั้นฉันจะพยายามอธิบายให้ดีที่สุดเท่าที่จะทำได้ เวอร์ชั่นย่อ:มีสูตร c ++ / physx ทั่วไปที่นั่นเพื่อคำนวณแรงเฉื่อยเทนเซอร์ตามรูปร่างของวัตถุหรือไม่? รุ่นยาว: สำหรับฟิสิกส์ของเราเราต้องระบุเทนเซอร์แรงเฉื่อย x, y และ z ในปัจจุบันวิธีที่เราทำมันก็แค่อัตราส่วนตามมวล ดังนั้นหากวัตถุยาวบนแกน X และบางบน Y และ Z และมวลเป็น 10,000 เราจะตั้งค่า Z และ Y เป็น 7000 และ X ถึง 3000 (นี่ไม่แน่นอน แต่เพื่อให้ความคิด) วิธีนี้ใช้งานได้ค่อนข้างดี แต่ปัญหาที่ใหญ่ที่สุดของเราคือเมื่อมีความไม่แน่นอนของข้อต่อบางแห่งเราต้องคาดเดาที่เทนเซอร์จนกว่าเราจะรู้ว่าอะไรดีที่สุด สิ่งนี้อาจใช้เวลานานมากหากเรามีการจำลองทางฟิสิกส์ที่ยิ่งใหญ่มากและข้อต่อหนึ่งใน 20 ข้อทำให้ผู้อื่นเสียเสถียรภาพ สิ่งที่ฉันกำลังทำคือฟังก์ชั่นที่จะใช้กล่องขอบเขตของวัตถุและหวังว่าจะคำนวณเมตริกซ์ที่ค่อนข้างแม่นยำ ฉันใช้คณิตศาสตร์บางส่วนจากhttp://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensorsและสร้างฟังก์ชั่นที่ทำงานคล้ายกับการหมุนข้างล่างนี้ หรือถ้าการหมุนสิ้นสุดแล้วเช่นนี้ ดังนั้นนี่ดูเหมือนจะให้ผลลัพธ์ที่คล้ายกับวิธีที่เราทำ แต่ฉันไม่ต้องการเปลี่ยนมาใช้วิธีนี้โดยไม่ทำให้แน่ใจว่ามันจะใช้งานได้ทั่วไป ด้านล่างเป็นรหัสสำหรับฟังก์ชั่นของฉันตามภาพแรกที่มีลูกบาศก์และเดือยกลาง NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float …

4
วิธีการสร้างเอ็นจิ้นอนิเมชั่นกระดูก?
ฉันต้องการพัฒนาเกมแฟลช มันจะดึงดูดคนติดและแก้ไขท่าของเขา ผมคิดว่าสิ่งที่ฉันต้องการที่จะเรียนรู้ที่มีกระดูกนิเมชั่นและเครื่องยนต์ฟิสิกส์ ทุกคนสามารถแนะนำแหล่งข้อมูลที่ดีเพื่อเรียนรู้ทั้งคู่ได้หรือไม่?

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