Bulletのダウンロード
githubからクローンするかzipをダウンロードします
バージョンは 2.83 です
https://github.com/bulletphysics/bullet3
プロジェクトのビルド
ダウンロードしたフォルダの中にある
build_visual_studio_vr_pybullet_double.bat
をダブルクリックすると同じフォルダにあるbulid3の中のvs2010にプロジェクトが作成されます
0_Bullet3Solution.sln
からソリューションを開きビルドをして正常にビルドが終了するか確認します
phythonが入っていない場合エラーが出ますがその機能を使わない場合は問題ないので無視しても大丈夫です
ダウンロードしたフォルダの一番上にあるbinフォルダの中にlibファイルがあるか確認します
BulletDynamic
BulletCollision
LinearMath
があれば最初は大丈夫だと思います
このBinフォルダとsrcフォルダへの環境変数を作っておくとbulletを使ったプロジェクトの作成が楽になると思います
Bulletを使ったプロジェクトを作成
Visual Studio 2017 ver15.7.5で作っていますが基本的には変わらないと思います
プロジェクトを作成し上にある
プロジェクト->プロパティ
プロパティ画面で左にある
c++->全般
の一番上にある
追加のインクルードディレクトリ
にダウンロードしたフォルダにあるsrcフォルダへのパスを通します
c++->プリプロセッサ
の一番上にあるプリプロセッサの定義の部分に
BT_THREADSAFE=1
BT_USE_DOUBLE_PRECISION
の二つを追加します
プロパティ画面の左にある
リンカ->全般
の上から8番目にある
追加のライブラリ ディレクトリ
にダウンロードしたフォルダにあるbinフォルダへのパスを通します
リンカ->入力
の一番上にある
追加の依存ファイル
使用したいlibファイル(binフォルダの中にあるもの)の名前を書きます
x64とx86(Win32)、debug,releaseを間違わないようにします
btBulletDynamicsCommon.h
をインクルードし
次のコードを追加してプロジェクトをビルドしてみます
btBroadphaseInterface* broadphase = new btDbvtBroadphase();
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver();
btDiscreteDynamicsWorld* world = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
delete broadphase;
delete collisionConfiguration;
delete dispatcher;
delete solver;
delete world;
エラーが出なければ導入成功です
おわりに
プリプロセッサで定義したBT_USE_DOUBLE_PRECISIONはlibファイルをビルドするときに各プロジェクトから外しておけば使用するプロジェクトでも書く必要がなくなります
この定義はbullet内の各クラスが値をdoubleで持つようにので精度が上がるはずです
定義を書かない場合はfloatになります
個人的にはdoubleが必要になる場面はまだないので外していいかなと思います
lib作成時の定義と導入プロジェクトの定義とで差異があると
未解決の外部シンボルやデリートしたときのエラーが起きるので原因のがわからず個人的に導入で一番躓いた部分でした
この定義の部分に触れているbulletの導入記事が見当たらなかったので今回の記事を書いてみました
公式のどこかに書いてあったのかな?