Как мне интегрировать физику пули в мою игру?

12

Я скачал файл релиза, найденный здесь , но я просто не уверен, с чего начать. В моей игре у меня есть несколько продолговатых и сфера, я хочу, чтобы все они сталкивались друг с другом. (Все они имеют сетки и связанные ограничивающие объемы)

редактировать - я только что понял, что с кубоидами на самом деле связаны AABB. Я думаю, мне придется изменить это по крайней мере.

Какие шаги мне нужно выполнить?

SirYakalot
источник
2
сделал вы посмотрите в руководстве по главе 4.4 Integration overviewя знаю , что это очень спартанские , но это не описывается основной процесс. Так что, если вы посмотрите на это и код для примера Demos , то вам не должно быть слишком много проблем.
PeterT
Также проверьте примеры в папке пули, есть куча «эм
Maik Semder
@MaikSemder Я не совсем знал, как открыть конкретные. такое make files linux только?
SirYakalot
на самом деле заметки о том, как открыть примеры, были бы невероятно полезными, тогда я мог бы просто увидеть, как они связывают вещи там. Я буду гуглить вокруг этого, но я подумал, что должен спросить, пока могу.
SirYakalot
Это зависит от того, на какой вы платформе. Для Visual Studio на Windows есть файл .sln для примеров, я предполагаю, что это то, что вы используете. Просто найдите файл sln в папке с маркерами.
Майк Земдер

Ответы:

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(я предполагаю , что из руководства). Теперь , чтобы сделать связь между пулей и вашим проектом ...

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

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

После установки этого, вы можете просто сделать #include “btBulletDynamicsCommon.h”на вашем коде. Это заголовок кажется, служит в качестве концентратора ко всем функциям вам требуется.

3. Библиотеки Link

Наконец вам нужно связать библиотеки , упомянутые выше. 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), и менее чем через час у меня все было в порядке.
Дэвид Гувея