Bagaimana cara saya mengintegrasikan fisika peluru ke dalam permainan saya?

12

Saya mengunduh file rilis yang ditemukan di sini , tetapi saya tidak yakin harus mulai dari mana. Dalam permainan saya, saya memiliki sejumlah bujur dan bola, saya ingin semua ini saling bertabrakan. (Mereka semua memiliki jerat dan volume pembatas terkait)

sunting - Saya baru sadar bahwa kuboid sebenarnya memiliki AABB yang terkait dengannya. Saya kira saya harus mengubahnya setidaknya.

Apa langkah-langkah yang harus saya ikuti?

SirYakalot
sumber
2
apakah Anda melihat ke dalam manual di bawah bab 4.4 Integration overviewsaya tahu itu sangat sederhana tetapi tidak menggambarkan proses dasar. Jadi jika Anda melihat itu dan kode untuk contoh Demo maka Anda seharusnya tidak memiliki terlalu banyak masalah.
PeterT
Juga periksa contoh di folder peluru, ada banyak 'em
Maik Semder
@MaikSemder Saya tidak yakin bagaimana cara membuka yang spesifik. apakah hanya membuat file linux?
SirYakalot
sebenarnya catatan tentang cara membuka contoh akan sangat membantu, maka saya bisa melihat bagaimana mereka menghubungkan berbagai hal di sana. Saya akan google sekitar untuk ini, tetapi saya pikir saya harus bertanya selagi saya bisa.
SirYakalot
Itu tergantung pada platform apa Anda. Untuk visual studio di windows ada file .sln untuk contoh, saya berasumsi itulah yang Anda gunakan. Cukup cari file sln di folder bullet.
Maik Semder

Jawaban:

21

Inilah langkah-langkah dasar yang harus Anda ikuti:

  1. Pertama buat objek dunia (yaitu btDiscreteDynamicsWorld) untuk mengarahkan simulasi fisika Anda.

  2. Anda seharusnya sudah memiliki kelas seperti GameObjectitu yang mungkin menyimpan model beserta kotak pembatas dan posisi / orientasinya di dunia. Ganti dengan posisi / orientasi informasi dengan sebuah contoh dari fisika tubuh objek (yaitu btRigidBody) dan saat rendering model, menggunakan informasi yang diberikan oleh tubuh sebagai gantinya. Saat membuat tubuh Anda harus memberikan massa dan bentuk tumbukan yang harus sesuai dengan volume yang sudah Anda miliki. Saya sudah membicarakan hal ini di pertanyaan Anda yang lain juga.

  3. Tambahkan masing-masing tubuh objek game Anda ke objek dunia .

  4. Perbarui simulasi dengan melangkahi dunia (mis. Memanggil stepSimulationdunia Anda).

Dan luangkan waktu untuk membaca manual karena memiliki banyak informasi juga.


Edit ke alamat komentar

Saya merasa ngeri sebelum bertanya tetapi ... bagaimana cara saya melakukan hal-hal yang sangat mendasar seperti hanya memasukkan file yang tepat dalam permainan saya? Jika Anda perlu spesifik saya mencari file yang akan berurusan dengan tabrakan tubuh yang kaku. Juga terima kasih banyak atas bantuannya sejauh ini!

Ya, akan muncul dari komentar Anda bahwa Anda belum pernah bekerja dengan pustaka C ++ eksternal sebelumnya. Sudah lama sejak saya melakukan ini, tetapi ini adalah bagaimana saya mengingat proses menjadi (dalam Visual Studio).

Sebagai permulaan saya mengutip manual yang sudah menjelaskan apa yang Anda butuhkan:

- #include btBulletDynamicsCommon.h in your source file 
- Required include path: Bullet/src folder 
- Required libraries: BulletDynamics, BulletCollision, LinearMath

Dan inilah langkah-langkah dasar yang harus Anda ikuti untuk memenuhi persyaratan di atas ...

1. Langkah Persiapan

Pertama-tama, ekstrak file yang Anda unduh ke direktori yang dikenal, misalnya C:\Bullet. Anda harus mengetahui jalur ke folder ini nanti.

Di dalam ada dua folder yang perlu Anda rujuk dalam proyek Anda. Yang pertama adalah srcfolder yang menyimpan .hfile header yang akan Anda sertakan dalam kode sumber Anda. Yang kedua adalah libfolder yang akan menyimpan .libfile perpustakaan yang akan Anda tautkan ke proyek Anda. Perhatikan bahwa memasukkan dan menautkan adalah dua hal yang berbeda.

Tetapi libfolder itu harus kosong untuk saat ini, karena Anda belum membuat mesinnya. Jadi lihat manual tentang cara membangun proyek menggunakan CMake dan Visual Studio misalnya. Ada di halaman 7.

Setelah Anda berhasil, Anda harus memiliki setidaknya tiga file dalam libfolder: BulletDynamics.lib, BulletCollision.libdan LinearMath.lib(saya duga dari manual). Sekarang untuk membuat koneksi antara Bullet dan proyek Anda ...

2. Sertakan Tajuk

Pertama-tama, Anda harus menambahkan C:\Bullet\srcfolder ke opsi jalur sertakan proyek Anda. Anda dapat melakukannya di Visual Studio dengan mengklik kanan pada proyek Anda, menavigasi ke Configuration Properties -> C/C++ -> General -> Additional Include Directoriesdan menulis jalur direktori di sana.

Setelah mengatur itu, Anda cukup melakukannya #include “btBulletDynamicsCommon.h”pada kode Anda. Header itu tampaknya berfungsi sebagai hub untuk semua fitur yang Anda butuhkan.

3. Tautan Perpustakaan

Akhirnya Anda harus menautkan perpustakaan yang disebutkan di atas. Frist, di bawah Configuration Properties -> Linker -> General -> Additional Library Directoriestambahkan path ke libfolder, atau dengan kata lain C:\Bullet\lib,.

Kemudian, di bawah Configuration Properties -> Linker -> Input-> Additional Dependencies, tambahkan nama perpustakaan ke daftar dependensi. Pisahkan setiap perpustakaan dengan a ;dan jangan lupa ekstensi file. Jadi misalnya, Anda mungkin menambahkan ini ke akhir daftar: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Setelah ini, Anda harus dapat membangun dan menjalankan proyek Anda.

David Gouveia
sumber
Saya merasa ngeri sebelum bertanya tetapi ... bagaimana cara saya melakukan hal-hal yang sangat mendasar seperti hanya memasukkan file yang tepat dalam permainan saya? Jika Anda perlu spesifik saya mencari file yang akan berurusan dengan benturan tubuh yang kaku. Juga terima kasih banyak atas bantuannya sejauh ini!
SirYakalot
@ AsherEinhorn Periksa edit saya.
David Gouveia
@ AsherEinhorn Tidak masalah, ini membuat saya tersandung juga saat pertama kali saya bekerja dengan perpustakaan C ++ beberapa tahun yang lalu.
David Gouveia
Ya, itu salah satu hal yang saya hindari sampai sekarang, semua kode dalam permainan saya adalah milik saya, tetapi mencoba untuk menulis mesin fisika saya sendiri hanya membuang-buang waktu ketika orang lain melakukannya dengan lebih baik daripada saya mungkin akan pernah.
SirYakalot
@ AsherEinhorn Ya, jangan repot-repot menulis mesin fisika Anda sendiri meskipun gimnya tampak sederhana. Pertama kali saya menggunakan mesin fisika adalah setelah mencoba mengimplementasikannya sendiri pada game 2D sederhana. Saya menerapkan deteksi tabrakan OBB-OBB menggunakan teorema sumbu pemisah, tetapi ketika saya mencapai titik di mana saya membutuhkan respons tabrakan, saya benar-benar terjebak. Kemudian saya pikir saya mungkin juga mencoba mesin fisika (khususnya saya menggunakan Box2D) dan dalam waktu kurang dari satu jam saya memiliki semuanya berjalan dan berjalan.
David Gouveia