คำถามติดแท็ก collision-detection

การตรวจจับการชนกันคือการพิจารณาว่าเอนทิตีสองคนหรือมากกว่านั้นทำการติดต่อกันระหว่างการเล่นเกม

4
ควรทำการตรวจจับการชนกันของเซิร์ฟเวอร์หรือทำงานร่วมกันระหว่างไคลเอนต์ / เซิร์ฟเวอร์หรือไม่
ฉันกำลังทำงานในเกมออนไลน์ที่จะมีการตรวจจับการชนกันอย่างหนักมาก ผู้เล่นรุ่นจะชนกับผู้เล่นคนอื่น ๆ mobs โครงสร้างภูมิประเทศและวัตถุทึบที่มีอยู่ฝั่งเซิร์ฟเวอร์เท่านั้น (ไม่ได้เก็บไว้ในไฟล์ข้อมูลลูกค้า) เพื่อจุดประสงค์ด้านความปลอดภัยฉันควรทำทั้งหมดด้านเซิร์ฟเวอร์ตรวจจับการชน? หรือฉันควรให้ลูกค้าทำการตรวจจับและให้เซิร์ฟเวอร์ติดตามมันอย่างใด? ฉันรู้สึกว่ามันจะมากเกินไปสำหรับเซิร์ฟเวอร์ที่จะทำด้วยตัวเอง (ฉันกำลังออกแบบเอ็นจิ้นสำหรับผู้เล่นหลายร้อยคนบนเซิร์ฟเวอร์เดียว) ไม่มีใครรู้ว่า MMO ที่สำคัญทำอย่างไร ฉันรู้ว่า MMO เกือบทั้งหมดในตอนนี้มีความไวต่อการแฮ็กฟิสิกส์และมักจะจัดการกับพวกเขาโดยการตรวจสอบแฮ็กและห้ามผู้คน ฉันต้องการแฮ็กที่ไม่ทำงานเลยอย่างน้อยก็สำหรับองค์ประกอบทางฟิสิกส์

6
วิธีเพิ่มประสิทธิภาพฟังก์ชั่นระยะทาง?
ในขณะที่พัฒนาเกมคล้าย RTS ที่เรียบง่ายพอสมควรฉันสังเกตว่าการคำนวณระยะทางของฉันทำให้เกิดผลกระทบต่อประสิทธิภาพ ตลอดเวลามีการตรวจสอบระยะทางเพื่อทราบว่ายูนิตอยู่ในระยะใกล้เป้าหมายหรือไม่หากกระสุนปืนมาถึงเป้าหมายหากผู้เล่นวิ่งผ่านรถปิคอัพชนทั่วไป ฯลฯ รายการจะดำเนินต่อไปและตรวจสอบหา ระยะห่างระหว่างจุดสองจุดใช้กันมาก คำถามของฉันเกี่ยวกับเรื่องนั้นอย่างแน่นอน ฉันต้องการทราบว่าผู้พัฒนาเกมทางเลือกมีอะไรบ้างในการตรวจสอบระยะทางนอกเหนือจากวิธี sqrt (x * x + y * y) ตามปกติซึ่งใช้เวลาค่อนข้างนานหากเราทำการแสดงหลายพันครั้งต่อเฟรม ฉันต้องการที่จะชี้ให้เห็นว่าฉันทราบระยะทางแมนฮัตตันและการเปรียบเทียบระยะทางกำลังสอง (โดยข้ามคอขวด sqrt) มีอะไรอีกไหม

5
การชนกันของข้อมูล
ฉันรู้วิธีตรวจสอบการชนได้ค่อนข้างดี แต่ฉันไม่รู้วิธีจัดการการชนในวิธีที่ดี ประยุกต์ได้ง่ายถ้าวัตถุสองชิ้นชนกันฉันใช้การคำนวณบางอย่างเพื่อเปลี่ยนทิศทางความเร็ว หากฉันไม่ย้ายวัตถุทั้งสองพวกเขาจะยังคงทับซ้อนกันและหากความเร็วไม่ใหญ่พอพวกเขาจะยังคงชนกันหลังจากอัปเดตครั้งถัดไป สิ่งนี้อาจทำให้วัตถุติดกัน แต่ถ้าฉันพยายามย้ายวัตถุทั้งสองดังนั้นพวกเขาจึงไม่ทับซ้อนกัน ฟังดูเป็นความคิดที่ดี แต่ฉันรู้ว่าถ้ามีวัตถุมากกว่าสองชิ้นสิ่งนี้จะซับซ้อนมาก ถ้าฉันย้ายวัตถุสองชิ้นและหนึ่งในนั้นชนกับวัตถุอื่นดังนั้นฉันต้องย้ายมันด้วยและพวกเขาอาจชนกับกำแพงเป็นต้น ฉันมีเกม 2D บนลงล่างในใจ แต่ฉันไม่คิดว่าจะเกี่ยวข้องกับมันมากนัก มักจะมีการชนกันอย่างไร คำถามนี้ถูกถามในนามของ Wooh

4
วิธีจัดการกับการชนมุมในแบบ 2D อย่างไร
ฉันกำลังเขียนเกม XNA ระดับบนลงล่าง ตั้งแต่ครั้งแรกที่ฉันพยายามเขียนฟิสิกส์และชนสิ่งต่าง ๆ เพื่อเรียนรู้ เมื่อใดก็ตามที่ผู้เล่นของฉันแสดงบทบาทตัวละครพยายามที่จะย้ายไปยังตำแหน่งที่ขอบเขตของมันตัดกับขอบของกำแพงฉันคิดออกมุมเด้ง (มุมของการเกิดอุบัติเหตุ = มุมของการสะท้อน) และฉันทำให้ผู้เล่นกระโดดออกจากกำแพงและหลีกเลี่ยงการชน . ฉันมีปัญหาในการหาวิธีจัดการกับสถานการณ์ของสไปรต์ของฉันตัดกับขอบผนังทั้งสองพร้อมกันแม้ว่ามันจะชนมุม ขณะนี้รหัสของฉันบอกฉันว่าขอบกำแพงทั้งสองได้ถูกตัดกัน แต่ไม่ใช่ขอบใดที่มันจะชนกันก่อนดังนั้นจึงควรจะตัดขอบไหน การทดสอบทางคณิตศาสตร์เพื่อเลือกขอบใดที่จะกระเด็น เป็นเรื่องธรรมดาที่จะเห็นเมื่อมองมัน แต่ฉันพยายามที่จะหาวิธีทดสอบคณิตศาสตร์

4
โมเมนตัมและลำดับของปัญหาการอัพเดทในเอนจิ้นฟิสิกส์ของฉัน
คำถามนี้คือ "ติดตาม" คำถามจากก่อนหน้านี้หนึ่งของฉันเกี่ยวกับการตรวจสอบการชนและความละเอียดที่คุณสามารถหาได้ที่นี่ หากคุณไม่ต้องการอ่านคำถามก่อนหน้านี่เป็นคำอธิบายสั้น ๆ เกี่ยวกับการทำงานของเครื่องมือฟิสิกส์ของฉัน: ทุกหน่วยงานทางกายภาพจะถูกเก็บไว้ในคลาสที่เรียกว่า SSSPBody รองรับเฉพาะ AABB SSSPBody ทุกคนถูกเก็บไว้ในคลาสที่เรียกว่า SSSPWorld ซึ่งจะอัปเดตทุกตัวและจัดการกับแรงโน้มถ่วง ทุกเฟรม SSSPWorld อัปเดตทุกส่วนของร่างกาย ร่างกายที่ได้รับการปรับปรุงทุกตัวจะมองหาวัตถุที่อยู่ใกล้เคียงในพื้นที่ว่างเปล่าตรวจสอบว่าพวกเขาต้องการตรวจจับการชนหรือไม่ ถ้าใช่พวกเขาเรียกใช้เหตุการณ์ "การชนกัน" และตรวจสอบว่าพวกเขาต้องการแก้ไขการชนกันหรือไม่ ถ้าใช่พวกเขาจะคำนวณเวกเตอร์การเจาะและการเหลื่อมกันของทิศทางจากนั้นเปลี่ยนตำแหน่งเพื่อแก้ไขการแทรกซึม เมื่อร่างกายชนกับวัตถุอื่นมันจะส่งผ่านความเร็วไปยังอีกความเร็วหนึ่งโดยการตั้งค่าความเร็วของร่างกายเป็นของมันเอง ร่างกายคือความเร็วถูกตั้งค่าเป็น 0 เมื่อมันไม่ได้เปลี่ยนตำแหน่งจากเฟรมสุดท้าย หากมันชนกับตัวถังที่เคลื่อนไหว (เช่นลิฟต์หรือแพลตฟอร์มที่กำลังเคลื่อนที่) มันจะคำนวณความแตกต่างของการเคลื่อนไหวของลิฟต์เพื่อดูว่าร่างกายไม่ได้เคลื่อนที่จากตำแหน่งสุดท้ายหรือไม่ นอกจากนี้เนื้อความจะเรียกเหตุการณ์ "ทับซ้อน" เมื่อมุม AABB ทั้งหมดซ้อนทับบางสิ่งบางอย่างในกรอบ นี้คือรหัสที่มาแบบเต็มของเกมของฉัน มันแบ่งออกเป็นสามโครงการ SFMLStart เป็นอินพุตการจัดการไลบรารีภาพวาดและการอัพเดตเอนทิตีที่ง่าย SFMLStartPhysics เป็นสิ่งที่สำคัญที่สุดโดยที่คลาส SSSPBody และ SSSPWorld นั้น PlatformerPhysicsTest เป็นโครงการเกมที่มีตรรกะของเกมทั้งหมด และนี่คือวิธี "อัปเดต" ในคลาส SSSPBody …

6
นำไปใช้หลีกเลี่ยงการชนกัน 100%
ฉันเป็นผู้เริ่มต้นที่สมบูรณ์ด้วยการพัฒนาเกมและทั้งหมดที่ฉันรู้เกี่ยวกับการหลีกเลี่ยง / การชนกันของข้อมูลฉันเรียนรู้ในหรือผ่านเว็บไซต์นี้ในสัปดาห์ที่ผ่านมา ... ดังนั้นอย่าลังเลที่จะแก้ไขให้ถูกต้องหากสิ่งที่ฉันถามที่นี่คือ ตามสมมติฐานที่ผิด / ความเข้าใจผิด ฉันพยายามทำให้ดีที่สุดเพื่อความชัดเจน แต่นั่นบอกว่าเรื่องนี้ยังคงเป็นนวนิยายสำหรับฉัน ยานพาหนะ ในเกมของฉันฉันมียานพาหนะที่เคลื่อนที่อย่างอิสระ พวกมันถูกวางไว้ในพื้นที่ 3 มิติและการเคลื่อนไหวของพวกเขาถูกควบคุมโดยตัวแปรหลายตัวที่แตกต่างกันไปในแต่ละยานพาหนะ สิ่งที่น่าสนใจอย่างหนึ่งของที่นี่คือ: เคลื่อนไหวไปข้างหน้าเท่านั้น ความเร็วที่สามารถแตกต่างกันระหว่างนาทีและสูงสุด แต่มีนาทีเป็นไม่ได้ (ได้ใกล้เคียงกับ) ศูนย์ รัศมีพวงมาลัยที่จะขึ้นจากความเร็ว (ความเร็วสูงกว่ารัศมีขนาดใหญ่) การเร่งสูงสุดสองครั้ง(สำหรับการลดและเพิ่มความเร็ว) เป้าหมาย เป้าหมายของฉันคือการใช้ AI บางประเภทซึ่งจะหลีกเลี่ยงการชนที่แม่นยำ 100% (เช่นฉันจะแน่ใจว่ายานพาหนะจะไม่ชนกัน) ออกแบบ แม้ว่าฉันจะต้องการความคิดเพิ่มเติมเกี่ยวกับการมี AI "onboard" (เช่นรถแต่ละคันที่มี "การหลีกเลี่ยงการชนกันของ AI" ในที่สุดการสอบถามและ / หรือส่งข้อความไปยังยานพาหนะอื่น ๆ ) ก็เป็นไปได้เช่นกันสำหรับฉัน ระดับกลาง (ส่งคำสั่งไปยังยานพาหนะ) ในกรณีส่วนใหญ่ยานพาหนะจะต้องหลีกเลี่ยงซึ่งกันและกันในทุกทิศทาง แต่ภายใต้สถานการณ์บางอย่างพวกเขาจะต้องหลีกเลี่ยงการชนและไปสู่เป้าหมายเดียวกัน สิ่งที่ฉันพบจนถึงตอนที่ฉันติดอยู่ ภายในลิงค์ต่าง ๆ …

3
OBB กับการตรวจจับการชน OBB
สมมติว่าคุณมี Bounding Box Object สองชิ้นแต่ละอันจะเก็บจุดยอดปัจจุบันของกล่องในเวกเตอร์ที่มีจุดยอดทั้งหมดของวัตถุที่หมุนและแปลโดยสัมพันธ์กับแกนทั่วไป นี่คือภาพเพื่ออธิบายปัญหาของฉัน: ฉันจะทำงานอย่างไรหาก OBB ทั้งสองวางซ้อนทับลิงก์ใด ๆ เพื่อช่วยอธิบายวิธีการแก้ไขปัญหาจะได้รับการต้อนรับ ไม่มีอะไรซับซ้อนเกินไปโปรด ...

7
ฉันจะตรวจจับผู้เล่นที่ถูกบดขยี้ในแพลตฟอร์ม 2 มิติได้อย่างไร
ฉันกำลังตรวจสอบการชนกันของตัวละคร platformer ดังที่แสดงใน # 1 จุดสีแดงคือพิกเซลที่ถูกเลือกและเส้นสีเทาแสดงถึงแกนที่เกี่ยวข้อง ฉันชอบผลลัพธ์ที่ฉันได้รับจากการตรวจสอบการชนกันด้วยวิธีนี้ (เทียบกับพูดกล่อง จำกัด ) ทุกอย่างทำงานตรงตามที่ฉันต้องการยกเว้นหนึ่งปัญหา: การตรวจจับความสนใจ ในภาพต่อไปนี้กล่องสีฟ้าอ่อนหมายถึงพื้นดินกล่องสีส้มเป็นวัตถุและลูกศรแสดงทิศทางการเคลื่อนไหว วิธีง่ายๆในการตรวจจับเมื่อผู้เล่นถูกบดขยี้คือการดูว่าจุดปะทะที่อยู่ฝั่งตรงข้ามกำลังกระตุ้น หากพวกเขาเป็นผู้เล่นจะถูกบดขยี้ ใน # 2 คุณสามารถเห็นสถานการณ์ความสนใจปกติ ผู้เล่นถูกต่อสายดินและจุดชนบนสุดจะตัดกับวัตถุที่ตกลงมา สิ่งนี้ทำให้เกิดความสนใจ # 3, 4 และ 5 นำเสนอสถานการณ์ที่เป็นปัญหา ใน # 3 ผู้เล่นกำลังเคลื่อนไปทางวัตถุซึ่งกำลังขยับขึ้น จุดปะทะด้านขวากำลังชนวัตถุทำให้เกิดการชนและหยุดเครื่องเล่น ตอนนี้ถ้าวัตถุยังคงเลื่อนขึ้นและผู้เล่นยังคงเลื่อนไปทางขวา (ดังที่แสดงใน # 4) วัตถุจะล้างจุดปะทะด้านขวาของผู้เล่นและผู้เล่นจะเลื่อนไปทางขวา แต่ตอนนี้เมื่อทำเช่นนั้นแล้ววัตถุกำลังตัดกันจุดปะทะด้านบนทำให้เกิดรอยย่นในแนวตั้งที่ไม่ต้องการ สถานการณ์ที่คล้ายกันจะแสดงใน # 5 วัตถุสองชิ้นนั้นอยู่ห่างกันมากพอที่จุดปะทะด้านล่างจะชัดเจนช่วยให้ผู้เล่นตกลงมา แต่ไม่ถึงขนาดยอมให้จุดปะทะด้านข้างนั้นชัดเจนทำให้เกิดแนวนอนที่ไม่ต้องการ ฉันคิดวิธีแก้ปัญหา แต่ก็ไม่มีอะไรที่ฉันคิดขึ้นมาทำงานได้ดีเป็นพิเศษดังนั้นฉันจึงสงสัยว่ามีใครมีความคิดหรือความเข้าใจในวิธีการแก้ปัญหาเหล่านี้หรือไม่ เพื่อกำจัดความสับสนจุดปะทะสีแดงจะอยู่ในสไปรต์และมีการใช้เส้นสีเทาเพื่อแสดงถึงแกนที่เกี่ยวข้องสำหรับแต่ละจุดปะทะกัน ตัวอย่างเช่นถ้าผีสางของตัวละครเป็นสี่เหลี่ยมสีเขียวง่าย ๆ จุดการชนจะมีลักษณะดังนี้:

2
ควรวางตรรกะการตรวจจับการชนกันที่ไหน
ฉันกำลังพัฒนาเอ็นจิ้นเกม 2D ขนาดเล็ก ตัวละครมีวิธีทาสีซึ่งปัจจุบันทำดังต่อไปนี้: คำนวณตำแหน่งใหม่ของตัวละครตามความเร็ว ฯลฯ อัปเดตเซลล์กริดการชน ** วาดตัวละครที่ตำแหน่งใหม่ ** ฉันได้สร้างตารางการชนกันเพื่อลดจำนวนการตรวจสอบทางแยก ตอนนี้อัลกอริทึมพื้นฐานที่ฉันคิดว่าตรวจจับการชนกันคือ: For Each Character Check intersection with characters in surrounding 8 cells ฉันสามารถวางรหัสนี้ในวิธีการทาสี แต่นี่คือปัญหาที่ฉันคาดหวัง สมมติว่าอักขระสองตัว A และ B อยู่ในเซลล์ที่อยู่ติดกันในตารางการชนกัน ตอนนี้ตามอัลกอริทึมข้างต้นในการวนซ้ำของอักขระ A มันจะตรวจพบว่ามันชนกับ B ในการวนซ้ำสำหรับอักขระ B มันจะตรวจจับว่ามันชนกับ A แต่ฉันมีความคิดว่าเมื่อ A ตรวจพบว่ามันชนกับ B มันควรแจ้ง B ว่ามันชนกับ A นี่จะช่วยประหยัดการเปรียบเทียบได้มากเมื่อมีนักแสดงมากกว่า 2 คนชนกัน แต่ฉันไม่แน่ใจว่าจะจัดการเรื่องนี้อย่างไร …

3
ฉันจะทดสอบว่ารูปหลายเหลี่ยมวงกลมและเว้าตัดกันได้อย่างไร
ฉันมีรูปหลายเหลี่ยม (บางครั้งนูน แต่มักเว้า) และเป็นวงกลมที่มีรัศมีแตกต่างกัน ฉันจะทราบได้อย่างไรว่าวงกลมตัดกันหรือทับซ้อนกับรูปหลายเหลี่ยม? ฉันสามารถแบ่งรูปหลายเหลี่ยมเว้าเป็นชิ้นส่วนนูน จะช่วยได้ไหม

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

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

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

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

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

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