Menghubungkan simulasi fisika dengan sistem koordinat yang berbeda

9

Saya ingin benda-benda bergerak di antara dua simulasi fisika melalui "jendela" dan bertabrakan dengan yang dari kedua simulasi seandainya mereka memotong bidang jendela.

Sistem koordinat simulasi tidak memiliki asal yang sama dan mungkin memiliki orientasi yang berbeda. Membungkus simulasi untuk dirinya sendiri tidak perlu, tetapi akan menjadi nilai tambah.

Bagaimana cara menghubungkan sistem secara efisien tanpa mengkloning objek individual?

Edit:

Perhitungan harus seakurat mungkin, sehingga objek tidak macet jika mereka melintasi jendela secara bersamaan dari sisi yang berlawanan.

Tamschi
sumber
Pertanyaan pertama adalah, apakah simulasi fisik akurat di seluruh jendela? Karena perubahan orientasi membuat sapuan yang tepat sangat tidak mungkin. Ini agak seperti mengubah portal skala - dunia kemungkinan rasa sakit. Pertanyaan kedua: Orientasi yang berbeda, seperti dalam sudut pandang sewenang-wenang, atau setidaknya 90 derajat, hanya pertukaran sumbu?
Kaj
Sekarang, ini terdengar seperti masalah yang harus mereka atasi di Portal. Jika saya ingat benar mereka menyebutkan masalah ini dan bagaimana mereka memecahkannya dalam beberapa komentar dalam game. Anda mungkin dapat menemukan ini di suatu tempat online.
Nailer
@ Kaj Saya pikir akan lebih baik untuk membagi jalur perhitungan untuk transisi yang sewenang-wenang dan miring. Dengan cara ini, sudut siku-siku bisa memiliki presisi dan kecepatan yang lebih tinggi, sementara sudut lainnya juga dimungkinkan.
Tamschi
@ Penjara Jika saya ingat dengan benar, mereka menciptakan lingkungan fisika baru ketika portal dibuka dan kemudian mengkloning setiap objek fisika yang mendekati simulasi tambahan ini. Mereka mengatakan bahwa mereka entah bagaimana membatasi objek, tetapi kemungkinan besar mereka hanya mengubah kekuatan dan posisi setiap langkah-fisika. <br> Saya cukup yakin bahwa mereka membuat klon ketiga di tujuan karena cara pergerakan pemain. disimulasikan dalam Sumber.
Tamschi

Jawaban:

2

Ada proyek keren ini bernama Pseudoform, yang sebelumnya dikenal sebagai 'Portalized', yang menangani simulasi fisika menggunakan portal dengan cara groove:

Pseudoform

Coba lihat!

Terutama video - itu sangat keren.

Ini open source, jadi Anda bisa melihat bagaimana mereka melakukannya.

Saya yakin itulah yang Anda inginkan. :)

jacmoe
sumber
2
Saya baru saja membaca kode: Cara mereka melakukannya hampir seperti solusi Valve, tetapi tanpa lingkungan fisika tambahan. Portal di mesin Portalized membuat duplikat objek setelah menyentuh permukaan portal, lalu menghapusnya setelah meninggalkan portal selama waktu tertentu. Jawaban ini masih agak membantu: Sambungan yang digunakan untuk membatasi duplikat menunjukkan bagaimana objek ditransformasikan di portal.
Tamschi
0

Oke - Saya tidak tahu apakah ini akan berhasil.
Berdasarkan info di atas saya akan meletakkan pemicu di 'windows' sehingga saya bisa mendeteksi ketika suatu objek keluar dari dunia. Raih vektor kecepatan saat ini pada saat tabrakan. Hitung timestep kiri berdasarkan di mana ia mengenai pelatuk dan di mana akhirnya bingkai ini (di luar dunia, dunia Anda akan memerlukan perbatasan virtual untuk memungkinkan ini). Pada titik ini Anda tahu kecepatan dan waktu yang tersisa, sehingga Anda dapat memposisikannya di perbatasan dunia yang akan dimasuki, dan memproyeksikan ulang kecepatannya. Namun ini akan membutuhkan dua pembaruan fisika dalam satu bingkai, dan akan ada batasan dari satu objek pergi dari a ke b sementara yang lain pergi dari b ke posisi yang sama - tidak akan ada tabrakan terdeteksi sama sekali.
Agak samar,

Kaj
sumber
Ini tampaknya menjadi cara tercepat yang mungkin, tetapi ada masalah jika dua objek melintasi jendela dari sisi yang sama: Jika objek pertama macet di tengah jalan melintasi perbatasan, yang kedua tidak akan bertabrakan sampai mencapai perbatasan, juga, dan muncul di dalam yang pertama di tempat tujuan.
Tamschi
Diedit sedikit saat Anda mengetik itu, dan memang itulah masalah yang saya tambahkan: o \
Kaj
Saya harus belajar membaca. Tambahan saya adalah kasus perbatasan lain . Akan merenungkan.
Kaj
Tidak, perbatasan ada di luar dunia. Jadi objek satu akan ditembakkan ke dunia 2 (dari perbatasan dunia 2 - bukan pada posisi jendela) dengan kecepatannya sendiri, seperti objek yang akan b. Mereka akan bertabrakan di dunia 2 di perbatasan dengan benar .... Saya pikir: o? Namun kasus perbatasan saya sendiri masih berlaku.
Kaj
Sepertinya saya salah membaca bagian tentang perbatasan virtual. Lagi pula, ada masalah lain jika suatu benda macet. Bagian di sisi belakang jendela tujuan masih akan dirender pada posisi semula, tetapi objek yang tidak menyentuh perbatasan tidak akan bertabrakan dengannya. Salah satu cara untuk menyelesaikan masalah ini adalah menyatukan simulasi, tetapi saya tidak yakin bagaimana ini dapat dilakukan secara efisien.
Tamschi
0

Saya membaca beberapa info tentang simulasi fisika dan menemukan solusi yang memungkinkan. Ia bekerja dengan memecah setiap fisika-langkah menjadi tiga fase:

1. Pra-Langkah:

Setiap langkah fisika, sebuah jendela menciptakan empat transformasi, dua untuk setiap sisi koneksi:

  • transformasi input yang mengubah posisi objek, kecepatan (dan mungkin ukuran dan berat) menjadi sistem koordinat tujuan dan
  • transformasi keluaran yang mengubah kekuatan kembali ke sistem asli objek.

(Jendela statis hanya perlu melakukan ini sekali.)

Selain itu, objek dalam setiap sistem koordinat dibagi menjadi tiga kelompok:

Pengelompokan Fisika http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Objek di depan jendela (hijau).
    Suatu objek juga dihitung terhadap grup ini jika ia memotong bidang jendela atau kemungkinan melintasinya dari belakang jendela (tidak ditampilkan).

  2. Objek yang memotong jendela atau mungkin memotongnya dalam langkah fisika ini (oranye).

  3. Objek di belakang jendela (biru). Jika suatu benda terbang ke arah sisi belakang jendela, itu masih ditandai sebagai anggota kelompok tiga.

Pengelompokan dapat disederhanakan jika jendela berada di perbatasan simulasi.

2. Langkah Utama:

Fisika sebagian besar dihitung seperti biasa, dengan beberapa pengecualian:

  • Objek dari kelompok kedua tidak pernah bertabrakan dengan yang dari kelompok ketiga dan sebaliknya.

  • Transformasi input jendela digunakan pada objek dari kelompok kedua dan hasilnya dievaluasi terhadap objek depan dan berpotongan dari sistem tujuan. Gaya yang dihasilkan ditransformasikan menggunakan transformasi keluaran dan diterapkan ke objek asli.

(Jika objek terkena selama perhitungan, itu harus dikelompokkan ulang!)

3. Pasca Langkah:

Jika suatu objek dari grup kedua telah melewati jendela, ia dipindahkan ke sistem tujuan menggunakan transformasi input.

Pikiran Tambahan:

Jika transformasi dipertahankan setelah menghitung fisika, mereka dapat digunakan untuk mempercepat rendering dan untuk perhitungan AI lebih mudah. Pengelompokan dapat digunakan untuk menghapus clip-pesawat dari proses rendering.

Kelemahan dari solusi ini adalah bahwa windows harus ditambahkan langsung ke mesin fisika.

Tamschi
sumber