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

กระบวนการปรับตำแหน่งวัตถุในเกมหลังจากการชนกัน

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

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 

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

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

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

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

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 * …

2
การจัดเก็บพิกัดของทุกวัตถุในฝั่งเซิร์ฟเวอร์ใน MMO
ใน MMORPG: เป็นเรื่องปกติหรือเป็นไปได้หรือไม่ที่จะเก็บพิกัดของต้นไม้ทุกต้นพุ่มไม้ ฯลฯ ในฝั่งเซิร์ฟเวอร์เพื่อตรวจจับการชนกันของข้อมูล? ถ้าเป็นเช่นนั้นจะมีวิธีใดในการจัดเก็บพิกัดจำนวนมาก (โครงสร้างข้อมูลและการจัดการปัญหาด้านประสิทธิภาพ) ถ้าไม่การตรวจจับการชนกันประเภทนี้ทำได้โดยสิ้นเชิงในฝั่งไคลเอ็นต์โดยที่เซิร์ฟเวอร์ไม่ได้ทำการตรวจสอบเลยหรือไม่? หรือมีพื้นกลางกับลูกค้าตรวจสอบการชนกันและการตรวจสอบเซิร์ฟเวอร์? ถ้าเป็นเช่นนั้นเซิร์ฟเวอร์จะตรวจสอบวิธีเดียวกันโดยไม่เก็บพิกัดไว้ในเซิร์ฟเวอร์ด้วยหรือไม่

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

2
ตัวอย่าง Microsoft XNA Platformer การตรวจจับ Collsion มีการใช้งานอย่างถูกต้องหรือไม่
ตัวอย่างที่ Microsoft เตรียมไว้ให้ดูเหมือนว่าการตรวจจับการชน (จากสิ่งที่ฉันเห็น) จะมีข้อผิดพลาดเล็กน้อย เมื่อผู้ใช้ชนกับไทล์ Unpassable ความลึกของจุดตัดจะถูกคำนวณ ค่าความลึกที่น้อยกว่า X และ Y ถูกใช้เพื่อกำหนดตำแหน่งของผู้ใช้ดังนั้นจึงไม่เกิดการชนกับไทล์อีกต่อไป แต่ถ้าผู้ใช้เดินทางในแนวทแยงมุมสิ่งนี้จะส่งผลให้ผู้ใช้ไม่ได้จบลงอย่างแม่นยำในจุดที่ตัวละครจะชนกับไทล์ก่อน? ฉันอาจผิด แต่นั่นเป็นเพียงวิธีที่ฉันเห็น private void HandleCollisions() { // Get the player's bounding rectangle and find neighboring tiles. Rectangle bounds = BoundingRectangle; int leftTile = (int)Math.Floor((float)bounds.Left / Tile.Width); int rightTile = (int)Math.Ceiling(((float)bounds.Right / Tile.Width)) - 1; int topTile …

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

4
การตอบสนองรูปสี่เหลี่ยมผืนผ้าชนกัน
ฉันมีปัญหาในการรับสี่เหลี่ยมที่เคลื่อนย้ายได้เพื่อชนกับสี่เหลี่ยมมากกว่าหนึ่ง ฉันกำลังใช้SFMLและมันมีฟังก์ชั่นintersectsที่ใช้งานง่ายที่เรียกว่าซึ่งใช้เวลา 2 สี่เหลี่ยมและส่งกลับจุดตัด ฉันมีเวกเตอร์ที่เต็มไปด้วยรูปสี่เหลี่ยมผืนผ้าซึ่งฉันต้องการให้สี่เหลี่ยมที่เคลื่อนย้ายได้ของฉันชนกัน ฉันวนลูปผ่านสิ่งนี้โดยใช้รหัสต่อไปนี้ (p คือสี่เหลี่ยมที่เคลื่อนที่ได้) IsCollidingWithส่งกลับค่าบูล แต่ยังใช้ SFML intersectsเพื่อหาจุดแยก while(unsigned i = 0; i!= testRects.size(); i++){ if(p.IsCollidingWith(testRects[i]){ p.Collide(testRects[i]); } } และCollide()รหัสจริง: void gameObj::collide( gameObj collidingObject ){ printf("%f %f\n", this->colliderResult.width, this->colliderResult.height); if (this->colliderResult.width < this->colliderResult.height) { // collided on X if (this->getCollider().left < collidingObject.getCollider().left ) { this->move( -this->colliderResult.width …

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

1
gluLookAt ทำงานอย่างไร
จากความเข้าใจของฉัน gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); เทียบเท่ากับ: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); แต่เมื่อฉันพิมพ์ModelViewเมทริกซ์การเรียกเพื่อglTranslatef()ดูเหมือนจะทำงานไม่ถูกต้อง นี่คือข้อมูลโค้ด: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int …

2
วิธีการแก้ไขการสอดแทรกของสองชนร่างกาย
ฉันใช้เครื่องมือทางฟิสิกส์ของเกม 3 มิติที่เรียบง่าย ฉันมีการตรวจจับการชนกันที่เหมาะสมแล้วตอนนี้ฉันกำลังพยายามหาส่วนการตอบสนองการชน ฉันใช้วิธีการตามแรงกระตุ้นเพื่อคำนวณความเร็วหลังการชน วิธีนี้ใช้ได้ผลดีทีเดียว แต่ก็ไม่ได้ป้องกันการแทรกซึมของร่างกายอย่างสมบูรณ์ ดังนั้นฉันจึงมีโค้ดเพิ่มเติมเพื่อแก้ไขการแทรกซึม ขณะนี้ฉันเพิ่งย้ายร่างกายไปตามการสัมผัสปกติโดยครึ่งหนึ่งของความลึกการเจาะ - ร่างกายแรกในทิศทางของการติดต่อปกติร่างกายที่สองในทิศทางตรงกันข้าม นี่เป็นเรื่องปกติเวลาส่วนใหญ่แล้ว แต่ก็มีผลที่ไม่พึงประสงค์บางอย่าง ตัวอย่างเช่นลองนึกภาพทางเดินแคบ ๆ และวัตถุเคลื่อนที่ผ่านมัน หากวัตถุชนกับผนังด้านหนึ่งของทางเดินความละเอียดการเจาะจะย้ายไปยังผนังฝั่งตรงข้ามจากนั้นในเฟรมถัดไปกลับเข้าไปในกำแพงแรกและอื่น ๆ ผลที่ได้คือวัตถุสั่นสะเทือนได้เร็วมากระหว่างผนังซึ่งไม่สวย ดังนั้นคำถามของฉันคือว่ามีวิธีที่ดีกว่าในการแก้ไขการเจาะหรือไม่ อาจจะไม่ย้ายร่างกายเพียงแค่ปรับความเร็วของพวกเขา (นอกเหนือจากการคำนวณแบบอิมพัลส์) ดังนั้นพวกเขาจึงหยุดเคลื่อนที่ไปหากันและกัน ฉันแค่เดาที่นี่ ความคิดใด ๆ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.