Як я інтегрую фізику куль в свою гру?


12

Я завантажив знайдений тут файл випуску , але я просто не впевнений, з чого почати. У своїй грі у мене є кілька довгастих і кульових, я хочу, щоб усі вони стикалися між собою. (Усі вони мають сітки та пов'язані з ними обмежувальні об'єми)

редагувати - Я щойно зрозумів, що кубоїди насправді пов’язані з ними AABB. Я думаю, що мені доведеться це хоча б змінити.

Які кроки мені потрібно виконати?


2
Ви заглянули в посібник під главою, 4.4 Integration overviewя знаю, що це дуже спартанське, але він описує основний процес. Отже, якщо ви подивитеся на це і код прикладу Demos, у вас не повинно виникнути занадто багато проблем.
PeterT

Також перевірте приклади в папці з кулями, є купа 'em
Maik Semder

@MaikSemder Я не був зовсім впевнений, як відкрити конкретні. чи роблять файли лише Linux?
SirYakalot

насправді нотатки про те, як відкрити приклади, були б неймовірно корисними, тоді я міг просто побачити, як вони пов’язують між собою речі. Я погукаю за цим, але я подумав, що слід запитати, поки зможу.
SirYakalot

Це залежить від того, на якій платформі ви знаходитесь. Для візуальної студії в Windows є .sln файл для прикладів, я припускаю, що це ви використовуєте. Просто знайдіть файл sln у папці bullet.
Майк Семдер

Відповіді:


21

Ось основні кроки, які вам потрібно виконати:

  1. Спершу створіть світовий об’єкт (тобто btDiscreteDynamicsWorld) для керування фізичним моделюванням.

  2. Ви вже повинні мати клас такого типу, GameObjectякий, можливо, зберігає модель разом із її обмежувальним вікном та положенням / орієнтацією у світі. Замінити в положенні / орієнтації інформації з примірником фізика тіла об'єкта (тобто btRigidBody) , а також при візуалізації моделі, використовувати інформацію , отриману від тіла замість цього. Створюючи кузов, вам потрібно надати його масі та формі зіткнення, яка повинна відповідати обмежувальним обсягам, які ви вже маєте. Я говорив про це і у вашому іншому запитанні .

  3. Додайте все тіло вашого ігрового об’єкта до світового об’єкта.

  4. Оновіть моделювання , перейшовши на світ (тобто закликаючи stepSimulationдо свого світу).

А також прочитайте посібник, оскільки в ньому також багато інформації.


Змінити для коментаря до адреси

Я плачу перед тим, як запитати, але ... як мені робити дуже елементарні речі, такі як просто включення правильних файлів у свою гру? Якщо вам потрібні конкретні відомості, я шукаю файли, які стосуватимуться жорстких зіткнень кузова. Також дуже дякую за допомогу поки що!

Що ж, із вашого коментаря видно, що ви ніколи раніше не працювали із зовнішніми бібліотеками C ++. Минуло деякий час, як я це зробив, але саме так я пам'ятаю процес (у Visual Studio).

Для початку я цитую посібник, який вже пояснює, що вам потрібно:

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

І ось основні кроки, які вам доведеться виконати, щоб виконати вищезазначені умови ...

1. Крок підготовки

Перш за все, витягніть файл, який ви завантажили, у відомий каталог, наприклад C:\Bullet. Пізніше вам доведеться знати шлях до цієї папки.

Всередині є дві папки, на які вам потрібно буде вказати у своєму проекті. Перша - це srcпапка, яка містить .hфайли заголовків, які ви включите у свій вихідний код. Друга - libпапка, в якій будуть зберігатися .libбібліотечні файли, які ви посилаєте на ваш проект. Зауважте, що включення та зв’язування - це дві різні речі.

Але libпапка наразі повинна бути порожньою, оскільки ви ще не побудували двигун. Тому зверніться до посібника про те, як створити проект, наприклад, за допомогою CMake та Visual Studio. Це на сторінці 7.

Після успіху, ви повинні мати принаймні три файли в libпапці: BulletDynamics.lib, BulletCollision.libі LinearMath.lib(я припускаю , що з керівництва). Тепер, щоб встановити зв'язок між Bullet та вашим проектом ...

2. Включіть заголовки

Перш за все, вам потрібно буде додати C:\Bullet\srcпапку до параметрів шляху включення вашого проекту. Це можна зробити у Visual Studio, клацнувши правою кнопкою миші на вашому проекті, перейшовши до нього Configuration Properties -> C/C++ -> General -> Additional Include Directoriesта записавши шлях до каталогу.

Після налаштування ви можете просто зробити #include “btBulletDynamicsCommon.h”свій код. Цей заголовок, здається, служить центром для всіх необхідних вам функцій.

3. Посилання бібліотек

Нарешті вам потрібно зв’язати вищезгадані бібліотеки. Frist під Configuration Properties -> Linker -> General -> Additional Library Directoriesдодати шлях до libпапці, або іншими словами, C:\Bullet\lib.

Потім, під Configuration Properties -> Linker -> Input-> Additional Dependencies, додайте назву бібліотек до списку залежностей. Відокремте кожну бібліотеку з ;і не забудьте розширення файлу. Так, наприклад, ви можете додати це в кінець списку: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Після цього ви повинні мати можливість створити і запустити свій проект.


Я плачу перед тим, як запитати, але ... як мені робити дуже елементарні речі, такі як просто включення правильних файлів у свою гру? Якщо вам потрібні конкретні відомості, я шукаю файли, які стосуватимуться жорстких зіткнень кузова. Також дуже дякую за допомогу поки що!
SirYakalot

@AsherEinhorn Перевір мою редагування.
Девід Гувейя

@AsherEinhorn Немає проблем, це також натрапило на мене в перший раз, коли я працював з бібліотеками C ++ пару років тому.
Девід Гувейя

Так, це одне з тих речей, яких я до цього часу просто уникав, увесь код у моїх іграх - мій, але намагатися написати власний двигун фізики - це лише марна трата часу, коли інші люди робили їх краще, ніж я певно, коли-небудь буде.
SirYakalot

@AsherEinhorn Так, не заважай писати власний двигун фізики, навіть якщо гра здається простою. Я вперше застосував двигун фізики після спроби реалізувати його самостійно у простій 2D грі. Я реалізував OBB-OBB зіткнення зіткнення за допомогою теореми, що розділяє вісь, але коли я досяг точки, коли мені потрібна реакція на зіткнення, я повністю застряг. Тоді я зрозумів, що я можу спробувати фізичний двигун (зокрема, я використовував Box2D), і за менше години я все працював.
Девід Гувейя
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.