คำถามติดแท็ก separating-axis-theorem

3
มีกี่แกนที่จะใช้สำหรับการชน OBB 3D กับ SAT
ฉันใช้ SAT ตาม: การตรวจจับการชนแบบไดนามิกโดยใช้กล่องที่มุ่งเน้นการละเมิด [PDF] ในหน้า 7 ในตารางมันหมายถึง 15 แกนเพื่อทดสอบเพื่อให้เราสามารถหาการชนกัน แต่ด้วย Axe, Ay และ Az ฉันได้รับการชนกันแล้ว ทำไมฉันต้องทดสอบเคสอื่นทั้งหมด มีสถานการณ์ใดที่ Axe, Ay และ Az ไม่พอ?

3
ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มันเป็นไปได้สำหรับฉันที่มีหลายคนที่กำลังทำงานอยู่ในขณะเดียวกันเช่นเอ็นจิ้นเกม สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

1
วิธีแก้ไขการชนกันของรูปร่างผสมโดยใช้ SAT?
SATเป็นวิธีที่เหมาะสมในการพิจารณาการชนกันระหว่างรูปหลายเหลี่ยมนูนโดยพลการ คุณยังจะได้เวกเตอร์ที่จำเป็นในการแก้ไขการชนกัน เพื่อแก้ไขปัญหาการชนกันระหว่างรูปร่างที่ซับซ้อน (แบบไม่นูน) ฉันกำลังคิดถึงรูปทรงผสมซึ่งประกอบด้วยรูปหลายเหลี่ยมนูนหลายรูป หากการชนเกิดขึ้นในช่วงกว้าง (เช่นวงกลมกับวงกลมหรือ AABB เทียบกับ AABB) การชนจะได้รับการแก้ไขโดยการตรวจสอบรูปหลายเหลี่ยมแต่ละรูปในรูปผสมกับรูปหลายเหลี่ยมแต่ละรูปในรูปสารประกอบอื่น ๆ ฉันสงสัยว่าวิธีที่ดีที่สุดในการแยกวัตถุจริงๆคืออะไร? วิธีการที่ไร้เดียงสาคือการเอาเวกเตอร์ที่มีขนาดใหญ่ที่สุดมาใช้เพื่อแยกกัน ในภาพต่อไปนี้จะเป็นV 2 อย่างไรก็ตามหากการแยกเวกเตอร์ชี้ไปในทิศทางที่ต่างกันการชนกันจะไม่สามารถแก้ไขได้ในทันทีและอาจต้องมีการวนซ้ำหลายครั้ง ดังนั้นในภาพถัดไปเราจะแยกโดยใช้V 1และในการวนซ้ำอีกครั้งโดยV 2 (หรือบางสิ่งที่ใกล้เคียงกับ V 2เนื่องจากรูปร่างจะเคลื่อนที่ตามจำนวน V 1 ) วิธีการนี้จะล้มเหลวเมื่อแยกเวกเตอร์ที่ชี้ไปในทิศทางตรงกันข้ามของกันและกันหรือในกรณีเช่นที่แสดงในภาพต่อไปนี้: ที่นี่เราจะวนซ้ำระหว่างรัฐด้านซ้ายและรัฐด้านขวาอย่างไม่สิ้นสุด ดังนั้นเพื่อถามคำถามจริงที่นี่: วิธีการที่เหมาะสมกับปัญหานี้คืออะไร? ฉันเดาว่าการใช้รูปหลายเหลี่ยมแบบผสมสำหรับรูปร่างที่ซับซ้อนเป็นความคิดที่สมเหตุสมผล แต่ฉันสงสัยจริงๆว่าควรแก้ไขการชนกันอย่างไรในกรณีนี้ ฉันจะตรวจจับจุดจบได้อย่างไรตามที่แสดงในภาพที่สาม

3
การแก้ปัญหาการชนในกรณีที่มีการชนกับวัตถุหลายอย่าง
ฉันมีวัตถุคงที่และวัตถุที่เคลื่อนย้ายได้ ตรวจพบการชนกันโดยใช้ทฤษฎีการแยกแกน - ตัวอย่างเช่นในสถานการณ์นี้ฉันมีวัตถุสองชิ้น (สีแดง): และวัตถุที่เคลื่อนที่ได้ระหว่างสอง: อัลกอริทึมของฉันสามารถคำนวณการชนกันระหว่างวัตถุทั้งสองนี้และมันก็แยกเวกเตอร์ความละเอียดที่สมบูรณ์แบบออกมา (หมายถึงการกระจัดต่ำสุด - เวกเตอร์) กับการชน ตัวอย่างเช่นเมื่อฉันตรวจสอบการชนกันระหว่างสี่เหลี่ยมสีเขียวและสี่เหลี่ยมสีแดงด้านขวาอัลกอริทึมจะแยกเวกเตอร์ที่บอกฉันว่าฉันต้องย้ายสี่เหลี่ยมสีเขียวเพื่อแก้ไขการชนกันอย่างไร: โปรดสังเกตว่าฉันเพิ่งวาดสิ่งนี้ใน MSPaint อย่างรวดเร็วดังนั้นในภาพนั้นอาจเป็นได้ว่าการแปลขั้นต่ำ - เวกเตอร์ผลักสี่เหลี่ยมผืนผ้าสีเขียวออกด้านบน แต่ฉันจะสมมติที่นี่ที่ผลักไปทางซ้าย / จริงสั้นกว่า วิธีการทั่วไปของการเข้าใกล้นี้จะแก้ไขการชนกันของหนึ่งการชนกันต่อหนึ่งเฟรมเท่านั้นแทนที่จะแก้ไขทั้งหมดในคราวเดียว แต่ในกรณีของฉันสิ่งนี้จะส่งผลให้การพลิกล้ม: ขั้นแรกตัวแก้ปัญหาตรวจจับการชนกันสองครั้ง แต่จะแก้ไขการชนกันระหว่างสี่เหลี่ยมด้านขวาและสี่เหลี่ยมสีเขียวเท่านั้น: จากนั้นในเฟรมถัดไปมันจะตรวจจับการชนเพียงครั้งเดียวซึ่งอยู่ระหว่างสี่เหลี่ยมผืนผ้าสีแดงซ้ายและสี่เหลี่ยมสีเขียวและแก้ไขมัน: อย่างที่คุณเห็นนี่จะไม่สามารถแก้ไขการชนกันได้ (ตัวอย่างเช่นโดยการกดสี่เหลี่ยมสีเขียวออกไปด้านบน) และเพียงแค่พลิก flops ระหว่างสองสถานะแทน ฉันจะแก้ปัญหานี้ได้อย่างไร

3
การตอบสนองการปะทะกันของเกม 2D: SAT และการเคลื่อนที่ขั้นต่ำตามแกนที่กำหนดหรือไม่
ฉันพยายามนำระบบการชนมาใช้ในเกม 2D ที่ฉันทำ ทฤษฎีแกนการแยก (ตามที่อธิบายโดยบทช่วยสอนการชนของ metanet ) ดูเหมือนจะเป็นวิธีที่มีประสิทธิภาพและมีประสิทธิภาพในการจัดการการตรวจจับการชน แต่ฉันไม่ชอบวิธีการตอบสนองการชนที่พวกเขาใช้ ด้วยการแทนที่แกนอย่างเหลื่อมซ้อนกันอย่างสุ่ม ๆ อัลกอริธึมก็เพิกเฉยตำแหน่งก่อนหน้าของวัตถุที่เคลื่อนที่ซึ่งหมายความว่ามันจะไม่ชนกับวัตถุเคลื่อนที่มากเท่าที่มันเข้ามาแล้วก็เด้งออกมา นี่คือตัวอย่างของสถานการณ์ที่สำคัญ: ตามวิธี SAT อธิบายข้างต้นสี่เหลี่ยมจะโผล่ออกมาจากสามเหลี่ยมตั้งฉากกับด้านตรงข้ามมุมฉากของมัน: อย่างไรก็ตามตามความเป็นจริงสี่เหลี่ยมควรหยุดที่มุมล่างขวาของรูปสามเหลี่ยมซึ่งจะเป็นจุดที่เกิดการชนครั้งแรกถ้ามันเคลื่อนไหวอย่างต่อเนื่องตามเวกเตอร์การกระจัด: ตอนนี้สิ่งนี้อาจไม่สำคัญในระหว่างการเล่นเกม แต่ฉันชอบที่จะรู้ว่ามีวิธีการที่มีประสิทธิภาพ ฉันเก็บสมองของฉันไว้สองสามวันที่ผ่านมาและฉันยังไม่อยากยอมแพ้! (ข้ามโพสต์จาก StackOverflow หวังว่าจะไม่ผิดกฎ!)

4
ค้นหาจุดติดต่อด้วย SAT
ทฤษฎีการแยกแกน (SAT) ทำให้ง่ายต่อการพิจารณา Vector Translation ขั้นต่ำเช่นเวกเตอร์ที่สั้นที่สุดที่สามารถแยกวัตถุสองชนกัน อย่างไรก็ตามสิ่งที่ฉันต้องการคือเวกเตอร์ที่แยกวัตถุตามเวกเตอร์ที่วัตถุที่กำลังเคลื่อนที่กำลังเคลื่อนที่ (เช่นจุดสัมผัส) ฉันวาดภาพเพื่อช่วยอธิบาย มีช่องหนึ่งช่องคือเคลื่อนจากตำแหน่งก่อนไปยังตำแหน่งหลัง ในตำแหน่งหลังจากนั้นมันจะตัดกันหลายเหลี่ยมสีเทา SAT สามารถส่งคืน MTV ซึ่งเป็นเวกเตอร์สีแดงได้อย่างง่ายดาย ฉันต้องการคำนวณเวกเตอร์สีน้ำเงิน โซลูชันปัจจุบันของฉันทำการค้นหาแบบไบนารีระหว่างตำแหน่งก่อนและหลังจนกระทั่งความยาวของเวกเตอร์สีน้ำเงินเป็นที่ทราบกันในเกณฑ์ที่กำหนด มันใช้งานได้ แต่เป็นการคำนวณที่มีราคาแพงมากเนื่องจากการชนกันระหว่างรูปร่างจำเป็นต้องคำนวณใหม่ทุกลูป มีวิธีที่ง่ายกว่าและ / หรือมีประสิทธิภาพมากกว่าในการค้นหาเวกเตอร์จุดติดต่อหรือไม่?

3
อัลกอริทึมตรวจจับการชนกันของเฟสแคบ
การตรวจจับการชนมีสามขั้นตอน Broadphase : มันวนลูประหว่าง objec ทั้งหมดที่สามารถโต้ตอบบวกได้รับอนุญาตถ้ามันจะเร่งความเร็ววน Narrowphase : พิจารณาว่าพวกเขาชนกันและบางครั้งอย่างไรไม่มีผลบวกปลอม การแก้ไข : แก้ไขการชน คำถามที่ฉันถามเป็นเรื่องเกี่ยวกับเฟสแคบ มีอัลกอริธึมหลายอย่างแตกต่างกันในความซับซ้อนและความแม่นยำ Hitbox intersection : นี่เป็นอัลกอริทึม a-posteriori ที่มีความซับซ้อนต่ำที่สุด แต่ก็ไม่แม่นยำเกินไป จุดตัดสี : จุดตัด Hitbox สำหรับแต่ละพิกเซล, a-posteriori, พิกเซลสมบูรณ์แบบ, ไม่แม่นยำในเรื่องของเวลา, ความซับซ้อนสูงขึ้น การแยกทฤษฎีบทแกน : มันถูกใช้บ่อยกว่า, แม่นยำสำหรับรูปสามเหลี่ยมอย่างไรก็ตาม, a-posteriori, เนื่องจากมันหาขอบไม่ได้, เมื่อพิจารณากรอบสุดท้ายในบัญชี, มันมีเสถียรภาพมากขึ้น Linear raycasting : อัลกอริทึม A-Priori ซึ่งเป็นประโยชน์สำหรับฟิสิกส์กึ่งที่สมจริงมองหาจุดตัดที่แม่นยำยิ่งกว่า SAT แต่มีความซับซ้อนมากขึ้น การแก้ไขเส้นโค้ง: A-Priori, แม่นยำยิ่งขึ้นกว่ารังสีเชิงเส้น, coplexity …

1
การแยกทฤษฎีบทแกนด้วยหลายเหลี่ยม
ฉันพยายามที่จะใช้ทฤษฎีบทแกนแยกใน C # ฉันมีฟังก์ชั่นที่สามารถคำนวณเวกเตอร์การแปลขั้นต่ำระหว่างรูปหลายเหลี่ยมสองอัน อย่างไรก็ตามฉันไม่สามารถสร้างฟังก์ชันที่คำนวณเวกเตอร์การแปลขั้นต่ำได้ระหว่างรูปหลายเหลี่ยมหนึ่งกับรูปหลายเหลี่ยมอื่น ๆ สุจริตฉันได้ทำงานกับสิ่งนี้มาหลายเดือนแล้วและฉันก็ไม่ได้เข้าใกล้ทางออกและไม่สามารถหาวิธีแก้ปัญหาออนไลน์ได้ มีกรณีขอบบางอย่างที่ไม่ส่งคืนผลลัพธ์ที่ถูกต้องนำไปสู่ข้อบกพร่องที่มีลำดับความสำคัญสูงในเกมของฉัน นี่คือกรณีขอบทั่วไปที่ทำงานไม่ถูกต้อง: มีวิธีแก้ไขปัญหาที่รู้จักกันดีสำหรับปัญหานี้หรือไม่? ทั้งหมดที่ฉันสามารถหาได้คือคนที่พูดว่า "แค่ทำ SAT ในรูปหลายเหลี่ยมแต่ละอัน" แต่นี่ไม่ค่อยจะสร้างเวกเตอร์การแปลขั้นต่ำ ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.