Saya membuat mesin fisika 3D untuk melempar dadu. Sampai sekarang dadu telah 1x1x1m dan gravitasi telah 9,82 m / s ^ 2. Ini tentu saja tidak terlihat realistis karena dadu akan merespons semuanya dengan cara yang terlihat agak lambat.
Untuk memperbaikinya saya mencoba mengubah semua ukuran untuk membuat dadu sekitar 0,02m di samping. Ini pada gilirannya membuat massa invers saya dan matriks inersia terbalik mendapatkan nilai yang sangat besar yang menyebabkan ketidakstabilan numerik.
Apa rute terbaik untuk menangani ini? Bisakah saya menjaga skala agar dadu 1x1x1 dan hanya mengubah massa atau ukuran gaya akting? Atau haruskah saya mengubah sesuatu yang lain?
Saya kira masalah yang sama bisa muncul jika Anda membuat game dengan tubuh fisik yang sangat besar seperti pesawat ruang angkasa atau sesuatu, jadi saya berharap seseorang telah mengalami sesuatu yang serupa sebelumnya.
sumber
Jawaban:
Anda bisa
sumber
Jika Anda mengalami masalah dengan nilai-nilai numerik kecil, saya sarankan Anda mengurangi semuanya. Anda bahkan mungkin tidak menggunakan unit pengukuran "nyata", tetapi hanya beberapa unit "generik" yang hanya masuk akal di dalam mesin.
Opsi pertama, penskalaan, akan mengharuskan Anda menggunakan milimeter atau sentimeter sebagai unit pengukuran dasar. Dimensi kubus Anda tidak akan menderita kehilangan presisi.
Solusi kedua pada dasarnya adalah hal yang sama, tetapi Anda tidak perlu memikirkan unit yang sebenarnya.
Juga, mengapa Anda tidak mengubah massa kubus saja?
sumber
Perpustakaan Bullet Physics memiliki halaman wiki tentang penskalaan dunia fisika . Informasi ini mungkin berguna dengan mesin fisika lain juga.
sumber
Saya pikir saya harus membagikan solusi terakhir saya untuk masalah ini. Meningkatkan gravitasi konstan seperti yang disarankan memang membuat dadu bergerak lebih cepat sehingga memberi kesan skala yang benar. Namun, ini meningkatkan masalah microbouncing. Saya menambahkan microcollisions yang mengurangi masalah meskipun tidak menyelesaikannya dengan sempurna. Perhatikan bahwa ini menjadi masalah hanya untuk objek "kecil", jika Anda mengalami masalah terbalik dan ingin mensimulasikan objek yang sangat besar (pesawat ruang angkasa atau sesuatu seperti itu) maka Anda tidak akan mendapatkan masalah microbouncing sama sekali dan dapat bersaing dengan solusi itu.
Jadi saya menemukan tingkat gravitasi tertinggi yang bisa saya miliki tanpa terlalu banyak "microbouncing". Kemudian saya menggunakan deteksi guncangan sederhana pada telepon yang merespons perubahan besar dari pembacaan accelerometer dan impuls yang diterapkan ke semua objek ketika getaran tersebut terdeteksi. Itu tidak sempurna tetapi karena akan mengatur dadu bergerak cepat ketika ponsel diguncang, itu akan memberi kesan dadu "kecil". Ini sedikit hack tetapi harus dilakukan :) Berikut adalah klip dari mesin yang sedang beraksi.
sumber