Как настроить столкновение с помощью библиотеки Bullet Physics? - PullRequest
1 голос
/ 06 апреля 2011

Эй, у меня немного «задержки» в настройке коллизий в моей игре opengl / sfml. Это не большая ошибка, просто попросить помощи. Я использую Bullet Physics (это ссылка на API), и я смотрю на различные функции и классы. затем я заметил, что в библиотеку включены демоверсии, поэтому, просматривая их, я не до конца их понимаю ..

Основная библиотека, которую они рекомендуют мне использовать, - это CollisionInterfaceDemo, поскольку я уже использовал GLM для моделей в opengl и sfml для 2D-целей и окна.

Мне просто интересно, знает ли кто-нибудь, как я смогу реализовать столкновение в моей игре.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Не уверен, что это то, что вам нужно, но это мой установочный код для базовой физики твердого тела:

#include "btBulletDynamicsCommon.h"

...

m_pBroadphase = new btDbvtBroadphase();
m_pCollisionConfig = new btDefaultCollisionConfiguration();
m_pCollisionDispatcher = new btCollisionDispatcher(m_pCollisionConfig);
m_pSolver = new btSequentialImpulseConstraintSolver();
m_pDynamicsWorld = new btDiscreteDynamicsWorld(m_pCollisionDispatcher, 
                                               m_pBroadphase, 
                                               m_pSolver, 
                                               m_pCollisionConfig);

После этого это просто вопрос добавления тел в мир ...

btRigidBody::btRigidBodyConstructionInfo info;

// set physical properties like mass, coefficient of restitution etc
info.m_mass = 10;
info.m_restitution = 0.5;
...

// Use a motion state to link the physics body with the graphics object.  
// This is the glue between Bullet and your code, called by bullet to update the 
// position & orientation of the object
info.m_motionState = new YourCustomMotionState(...) ; 

btRigidBody* pRigidBody = new btRigidBody(info);
m_pDynamicsWorld->addRigidBody(pRigidBody);

... и затем обновлять мировое состояние каждый кадр.

m_pDynamicsWorld->stepSimulation(deltaTime, m_maxSubSteps);

Это даст вам простую физическую симуляцию с твердыми телами, которые сталкиваются и отскакивают друг от друга, сПуля в управлении движением тел.

1 голос
/ 01 сентября 2011

Как вставить Bullet Physics в iOS: Образец кода OpenGL для iOS BulletPhysics

Загрузите образец кода или следуйте новой форме проекта Xcode с шаблоном openGL для iOS:

  1. Загрузить физику маркеров ... поместите ее в папку, как показано ниже:

* (обратите внимание, что для проекта есть папка, содержащая файл проекта Xcode)

/MyProjectFolder/bullet-2.78/
/MyProjectFolder/MyProject/MyProject.xcproj

1,5.Запустите CMake в каталоге физики, чтобы скомпилировать фреймворки (при условии, что вы уже установили cmake CMake ). Этот шаг необязателен для загруженного примера кода, поскольку он уже включил в него скомпилированные фреймворки ....файл 100 мегабайт, но что такое 100 мегабайт в наши дни?

cmake . -G "Unix Makefiles" -DINSTALL_LIBS=ON -DBUILD_SHARED_LIBS=ON     -DFRAMEWORK=ON  -DCMAKE_OSX_ARCHITECTURES='i386;x86_64'     -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/Library/Frameworks     -DCMAKE_INSTALL_NAME_DIR=/Library/Frameworks -DBUILD_DEMOS:BOOL=OFF
make -j4
sudo make install
  1. Перейти к вашему MyProject.xcproj и открыть в Xcode ...

в XCode перейти к любому файлуВы хотите добавить физический код в ... вы должны понимать, что файлы cpp - это файлы c ++, а файлы .m .h - вообще какао.Вы должны изменить класс, для которого вы хотите добавить код физического движка, чтобы расширение .mm означало, что оно должно быть скомпилировано как код Objective-C ++ ...

  1. В конкретном классе, который вы хотитечтобы добавить физику, которая теперь является файлом Objective-C ++ или файлом cpp, добавьте строку

    #include "btBulletDynamicsCommon.h"
    

, и вы должны скомпилировать ... ошибка в том, что файл не являетсянайдено ...

  1. Затем перейдите к MyProjectFolder / bullet-2.78 / src и перетащите папку src в свой проект.
  2. Удалите папку с именем BulletMultiThread ... itустранит ошибку при попытке скомпилировать некоторые файлы openCL (.cl)

  3. Последний шаг, скопируйте следующие рамки из папки src вашей физической установки пули в ваш проект:

    / MyProjectFolder / bullet-2.78 / LinearMath / LinearMath.framework /MyProjectFolder/bullet-2.78/BulletCollision/BulletCollision.framework /MyProjectFolder/bullet-2.78/LinearMath/LinearMath.framework*104610101010101010101010101010* Build and Run ... теперь должна без проблем скомпилироваться для iOS и Mac ...

...