การเชื่อมต่อแบบจำลองทางฟิสิกส์กับระบบพิกัดที่แตกต่างกัน


9

ฉันต้องการให้วัตถุเคลื่อนที่ระหว่างการจำลองทางฟิสิกส์สองรายการผ่าน "หน้าต่าง" และชนกับสิ่งที่จำลองมาทั้งสองกรณีที่พวกเขาตัดระนาบหน้าต่าง

ระบบพิกัดของการจำลองไม่ได้มีจุดกำเนิดเดียวกันและอาจมีทิศทางที่แตกต่างกัน การห่อแบบจำลองให้กับตัวเองนั้นไม่จำเป็น แต่จะเป็นข้อดี

ฉันจะเชื่อมต่อระบบได้อย่างมีประสิทธิภาพโดยไม่ต้องคัดลอกแต่ละวัตถุได้อย่างไร

แก้ไข:

การคำนวณควรแม่นยำที่สุดเท่าที่จะเป็นไปได้ดังนั้นวัตถุจะไม่ติดหากพวกเขาข้ามหน้าต่างในเวลาเดียวกันจากฝั่งตรงข้าม


คำถามแรกคือการจำลองทางกายภาพมีความแม่นยำทั่วทั้งหน้าต่างหรือไม่ เพราะการเปลี่ยนทิศทางทำให้การกวาดที่เหมาะสมเป็นไปไม่ได้เลยทีเดียว มันเหมือนกับพอร์ทัลที่เปลี่ยนแปลงขนาด - โลกแห่งความเจ็บปวดที่อาจเกิดขึ้น คำถามที่สอง: การวางแนวที่แตกต่างกันตามที่กำหนดหรืออย่างน้อย 90 องศาเป็นเพียงการสลับแกน?
Kaj

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

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

@Nailer ถ้าฉันจำได้ถูกต้องพวกมันจะสร้างสภาพแวดล้อมทางฟิสิกส์ขึ้นมาใหม่ในขณะที่พอร์ทัลกำลังเปิดอยู่ พวกเขาบอกว่าพวกมัน จำกัด วัตถุ แต่ก็เป็นไปได้มากที่พวกมันจะเปลี่ยนกองกำลังและวางตำแหน่งแต่ละขั้นตอนในฟิสิกส์ - ฉันค่อนข้างแน่ใจว่าพวกเขาสร้างโคลนนิ่งที่สามที่ปลายทางเนื่องจากวิธีการเคลื่อนไหวของผู้เล่น จำลองในแหล่งที่มา
Tamschi

คำตอบ:


2

มีโปรเจคที่เจ๋งนี้ชื่อ Pseudoform ซึ่งรู้จักกันในนาม 'Portalized' ซึ่งจัดการกับการจำลองทางฟิสิกส์โดยใช้พอร์ทัลในรูปแบบ Groovie:

Pseudoform

ลองดูสิ!

โดยเฉพาะวิดีโอ - มันเจ๋งมาก

มันเป็นโอเพ่นซอร์สดังนั้นคุณจะได้เห็นว่าพวกเขาทำได้อย่างไร

ฉันเดิมพันนั่นคือสิ่งที่คุณต้องการ :)


2
ฉันเพิ่งอ่านรหัส: วิธีที่พวกเขาทำมันเกือบจะเหมือนกับโซลูชันของ Valve แต่ไม่มีสภาพแวดล้อมทางฟิสิกส์เพิ่มเติม พอร์ทัลในเอ็นจิน Portalized สร้างวัตถุที่ซ้ำกันเมื่อสัมผัสกับพื้นผิวพอร์ทัลจากนั้นลบออกเมื่อมันออกจากพอร์ทัลในช่วงเวลาหนึ่ง คำตอบนี้ยังมีประโยชน์บ้าง: ข้อต่อที่ใช้ในการ จำกัด รายการที่ซ้ำกันแสดงวิธีเปลี่ยนวัตถุในพอร์ทัล
Tamschi

0

โอเค - ฉันไม่รู้ว่ามันจะใช้ได้ไหม
จากข้อมูลข้างต้นฉันจะวางทริกเกอร์ใน 'windows' เพื่อให้ฉันสามารถตรวจจับได้เมื่อวัตถุกำลังจะออกไปจากโลก คว้าเวกเตอร์ความเร็วปัจจุบันเมื่อเกิดการชน คำนวณเวลาที่เหลือโดยขึ้นอยู่กับว่ามันกดที่จุดใดและท้ายกรอบนี้ (นอกโลกโลกของคุณจะต้องมีเส้นขอบเสมือน เมื่อถึงจุดนี้คุณจะรู้ความเร็วและเวลาที่เหลืออยู่ดังนั้นคุณสามารถจัดตำแหน่งใหม่ในชายแดนของโลกที่กำลังจะเข้ามาและปฏิเสธความเร็ว อย่างไรก็ตามสิ่งนี้จะต้องมีการอัพเดททางฟิสิกส์สองครั้งในหนึ่งเฟรมและจะมี bordercase ของวัตถุหนึ่งไปจาก a ถึง b ในขณะที่อีกอันจะเปลี่ยนจาก b ไปยังตำแหน่งเดียวกัน - จะไม่มีการชนกันที่ตรวจพบเลย
ครับเค้าร่าง


สิ่งนี้ดูเหมือนจะเป็นวิธีที่เร็วที่สุดเท่าที่จะเป็นไปได้ แต่มีปัญหาหากวัตถุสองชิ้นข้ามหน้าต่างจากด้านเดียวกัน: หากวัตถุแรกติดอยู่กึ่งกลางข้ามชายแดนวัตถุชิ้นที่สองจะไม่ชนกันจนกว่าจะถึงเส้นขอบ เหมือนกันและปรากฏขึ้นภายในอันแรกที่ปลายทาง
Tamschi

แก้ไขเล็กน้อยในขณะที่คุณพิมพ์และนั่นคือปัญหาที่ฉันเพิ่ม: o \
Kaj

ฉันต้องเรียนรู้ที่จะอ่าน การเพิ่มของฉันเป็นอีกกรณีหนึ่งของชายแดน จะไตร่ตรอง
Kaj

ไม่พรมแดนอยู่นอกโลก ดังนั้นวัตถุหนึ่งจะถูกยิงเข้าสู่โลก 2 (จากชายแดนของโลก 2 - ไม่ใช่ที่ตำแหน่งหน้าต่าง) ด้วยความเร็วของมันเองเช่นเดียวกับวัตถุ b พวกเขาชนกันในโลกที่ 2 บนเส้นขอบอย่างถูกต้อง .... ฉันคิดว่า: o? อย่างไรก็ตามกรณีชายแดนของฉันยังคงถือ
Kaj

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

0

ฉันอ่าน infos เกี่ยวกับการจำลองทางฟิสิกส์และพบวิธีแก้ปัญหาที่เป็นไปได้ มันทำงานได้โดยแบ่งฟิสิกส์แต่ละขั้นเป็นสามขั้นตอน:

1. ขั้นตอนก่อนหน้า:

แต่ละขั้นตอนฟิสิกส์หน้าต่างสร้างการแปลงสี่สองสำหรับแต่ละด้านของการเชื่อมต่อ:

  • การแปลงอินพุตที่แปลงตำแหน่งของวัตถุความเร็ว (และขนาดและน้ำหนักที่เป็นไปได้) ลงในระบบพิกัดปลายทางและ
  • การแปลงผลลัพธ์ที่แปลงกำลังให้กลับเข้าสู่ระบบดั้งเดิมของวัตถุ

(หน้าต่างแบบคงที่จะต้องทำสิ่งนี้เพียงครั้งเดียวเท่านั้น)

นอกจากนี้วัตถุในแต่ละระบบพิกัดจะแบ่งออกเป็นสามกลุ่ม:

การจัดกลุ่มฟิสิกส์ http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. วัตถุที่อยู่ด้านหน้าของหน้าต่าง (สีเขียว)
    วัตถุจะถูกนับรวมในกลุ่มนี้ด้วยหากมีการตัดระนาบหน้าต่างหรือมีแนวโน้มว่าจะข้ามวัตถุจากด้านหลังหน้าต่าง (ไม่แสดง)

  2. วัตถุที่ตัดหน้าต่างหรือมีแนวโน้มว่าจะตัดกันในขั้นตอนฟิสิกส์ (สีส้ม)

  3. วัตถุที่อยู่ด้านหลังหน้าต่าง (สีน้ำเงิน) หากวัตถุบินไปทางด้านหลังของหน้าต่างวัตถุนั้นจะยังคงถูกทำเครื่องหมายเป็นสมาชิกของกลุ่มที่สาม

การจัดกลุ่มสามารถทำให้ง่ายขึ้นถ้าหน้าต่างอยู่ที่ขอบของการจำลอง

2. ขั้นตอนหลัก:

ส่วนใหญ่จะคำนวณทางฟิสิกส์ตามปกติโดยมีข้อยกเว้นเล็กน้อย:

  • วัตถุจากกลุ่มที่สองไม่เคยชนกับวัตถุจากกลุ่มที่สามและในทางกลับกัน

  • การแปลงอินพุตของหน้าต่างถูกใช้กับวัตถุจากกลุ่มที่สองและผลลัพธ์จะถูกประเมินเทียบกับวัตถุด้านหน้าและตัดกันจากระบบปลายทาง แรงที่เกิดขึ้นจะถูกแปลงโดยใช้การแปลงผลลัพธ์และนำไปใช้กับวัตถุดั้งเดิม

(หากวัตถุถูกกระทบระหว่างการคำนวณวัตถุนั้นจะต้องถูกจัดกลุ่มใหม่!)

3. ขั้นตอนหลัง:

หากวัตถุจากกลุ่มที่สองข้ามหน้าต่างวัตถุนั้นจะถูกย้ายไปยังระบบปลายทางโดยใช้การแปลงอินพุต

ความคิดเพิ่มเติม:

หากการแปลงถูกเก็บรักษาไว้หลังจากการคำนวณทางฟิสิกส์พวกมันสามารถใช้เพื่อเร่งการเรนเดอร์และเพื่อการคำนวณ AI ที่ง่ายขึ้น การจัดกลุ่มสามารถใช้เพื่อลบคลิปเครื่องบินออกจากกระบวนการแสดงผล

ข้อเสียของการแก้ปัญหานี้คือต้องเพิ่มหน้าต่างเข้าไปในเครื่องมือฟิสิกส์โดยตรง

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