Mesin fisika yang dapat menangani banyak penarik?


9

Saya menyusun permainan yang akan dimainkan sebagian besar dengan gravitasi tiga dimensi.

Maksud saya beberapa planet / bintang / bulan berperilaku realistis, dan merencanakan jalur dan prediksi jalur di bidang gravitasi.

Saya telah melihat berbagai mesin fisika, seperti Bullet , tokamak atau Newton , tetapi tidak satu pun dari mereka tampaknya cocok, karena saya pada dasarnya harus menulis ulang mesin gravitasi dalam kerangka mereka.

Apakah Anda tahu mesin fisika yang mampu berurusan dengan banyak benda semua tertarik satu sama lain?

Saya tidak perlu manajemen scenegraph, atau rendering, hanya fisika inti. (Deteksi tabrakan akan menjadi bonus, seperti dinamika tubuh yang kaku).


Latar belakang saya dalam fisika, jadi saya bisa menulis sebuah mesin yang menggunakan integrasi Verlet atau RK4 (atau bahkan integrasi Euler, jika saya harus) tetapi saya lebih suka mengadaptasi solusi off the shelf.

[Sunting]: Ada beberapa sumber yang bagus untuk simulasi fisika dari masalah n-body online, dan pada stackoverflow


7
Tidak bisakah kamu menggunakan Bullet dan keluar dari gaya gravitasi standarnya? (mis. hindari memanggil applyGravity, panggil setGravity dengan vektor nol, gunakan BT_DISABLE_WORLD_GRAVITY ...) Hanya karena efek yang Anda inginkan berupa bentuk gravitasi tidak berarti Anda harus dapat mencapainya melalui API "gravity" dari mesin fisika yang mendasarinya.
Neverender

Anda dapat menggunakan semacam pegas terbalik
Roy T.

1
@ Roy. Pegas per se memiliki gaya yang sebanding dengan d sedangkan gravitasi adalah d ^ (- 2) (bahkan d ^ (- 1)). Anda bisa mendapatkan orbit dari keduanya, tetapi dengan karakteristik yang sangat berbeda. Jika Anda hanya bermaksud "menggunakan batasan berbasis jarak yang disediakan oleh mesin", maka ya - jika memiliki kendala kuadrat-terbalik.
Kevin Reid

@KevinReid Anda mungkin benar, tapi saya tidak yakin saya mendapatkan penjelasan Anda. Apakah maksud Anda gaya pegas bergantung linear pada jarak dan gravitasi bergantung terbalik-kuadrat?
Roy T.

1
Osmos adalah gim kecil yang hebat. yang terbaik yang bisa saya temukan adalah wawancara ini
brice

Jawaban:


2

Saya tidak berpikir bahwa Anda akan dapat menggunakan mesin fisika kutu waktu konvensional karena masalah tiga tubuh tidak akan memungkinkan untuk orbit yang stabil.

Anda mungkin dapat menarik keluar mesin fisika dari Stellarium atau paket astronomi lainnya.

Namun, saya pikir tindakan terbaik adalah dengan hanya memanggang di jalur planet Anda dan menariknya keluar dari meja. Kecuali jika pemain Anda benar-benar dapat memengaruhi lintasan planet dengan tindakannya, tidak ada gunanya melakukan simulasi penuh.


Sebenarnya, dengan masalah N-body, Anda bisa mendapatkan orbit yang stabil. Itu tergantung pada metode integrasi Anda. Saya telah mengelola orbit stabil dengan verlet dan RK4.
brice

Ini adalah saran yang adil untuk menghitung jalur, tetapi saya ingin secara dinamis menghasilkan sistem dengan cepat, dan juga, planet-planet tidak benar-benar apa yang saya khawatirkan. Saya benar-benar ingin kapal - kapal dipengaruhi oleh gravitasi, dan karena ini akan berada di bawah kendali pemain, tidak dapat menghitung jalur sebelumnya.
brice

Cara untuk mendapatkan orbit stabil, sebagai catatan, adalah membuat sistem simetris. Juga, rentang waktu untuk ketidakstabilan jauh lebih lama daripada panjang rata-rata permainan. (tidak stabil lebih dari 100an hingga 1000an orbit planet, sementara permainan tidak akan bertahan lebih lama dari 4/5)
26

Untuk contoh orbit stabil, lihat ini (menggunakan Verlet)
26

1

Apakah ada batasan platform? Karena PhysX , dari nVidia, memiliki apa yang Anda cari, dan banyak lagi .


Ceria @ YuriAlbuquerque itu keunggulan yang cukup menarik. Saya berencana untuk melakukan sisi-fisika server dan rendering client - sisi, jadi saya harus memeriksa apakah itu cocok, tetapi kedengarannya bagus.
brice
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.