BulletPhysicsのビルド@Visualstudio2015

男もすなる物理エンジンといふものを。

まぁ大体ほとんど全てこのページ:[Bullet Physics を Visual Stuido 2015 でビルドする](http://ywma.blog.jp/archives/06890.html)に書いてある通りではあるんですけどね…

##BulletPhysics
C++で物理エンジンを利用しようと思ったときに出てきたのがこちらでした。剛体、軟体、衝突判定は出来るみたいです。

~~選ぶときには特に意識してなかったけど、~~[いろんな種類がある物理エンジン](https://ja.cppreference.com/w/cpp/links/libs)の中で、人気が高く(＝参考資料が見つかりやすい)、C++とPythonの両方で使えるようなのでよろしいかと。[比較参考(英語)](https://github.com/jslee02/awesome-collision-detection)

ソースコードで配布されているので、Libファイルを作ってあげる必要があります。

##ステップ1　インストール
[Githubのページ](https://github.com/bulletphysics/bullet3)からソースコードをダウンロードします。

##ステップ2　CMake前半
ビルドの手順には`build_visual_studio_without_pybullet_vr.bat`を利用するという方法も紹介されていますが、Visualstudio2010を対象としている？ようなので、~~慣れていないが~~CMakeします。
以下、`build_visual_studio_without_pybullet_vr.bat`や`src`などファイルやフォルダがあるディレクトリを`Home`と書きます。
(例えばCドライブ直下にGithubからZipでダウンロードしたならC://bullet3-master/bullet3-master/というフォルダが出来ていると思いますので、そこをHomeと呼ばせてもらいます。)

CMake-guiの
`Where is the source code:`にHomeを、
`Where to build the binaries:`にHome/build_cmakeを指定します(新たにbuild_cmakeというフォルダを作ります)
![where.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299179/f32ec0d1-396e-a08a-f4a9-b018dfd29e46.png)

そうしたらConfigureを押します。そうして出てくるダイアログ、僕はVisualstudio2015を使用しているので、`Specify the generator for this project`にVisual Studio 14 2015 Win64を指定しました。それぞれの開発環境に合ったものを選んで下さい。
![ダイアログ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299179/db2db3e4-1685-0eef-b8cf-2188871f097d.png)

そうしたらFinishを押します。これでCMakeで設定する状態になります。
![Cmake設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299179/a7c816ee-468e-a323-c806-ce3b14d9c259.png)

##ステップ2.5　CMake後半
チェックの付け外しについては[Bullet Physics を Visual Stuido 2015 でビルドする](http://ywma.blog.jp/archives/06890.html)、[Choreonoid 開発版 ドキュメント »BulletPluginのビルド](https://choreonoid.org/ja/manuals/latest/install/build-bulletPlugin.html)を参考にしました。

####以下、特に重要そうな設定(初期設定から変える部分、僕自身が引っかかった部分)
`BUILD_UNIT_TESTS`:オフ
→みんなオフにした方が良いっていうから

`CMAKE_INSTALL_PREFIX`：管理者権限の不要な場所に変更した方が良い。と思う。
ここにインクルードファイルとLibファイルがインストールされるんですね

`INSTALL_LIBS`：オン
→Step３でまとめてビルドできるようにするのに必要な模様

`USE_DOUBLE_PRECISION`：オフ推奨
→倍精度を使用するために必要な模様。**実行時のLNK2001エラーの原因になっているようなので、上手くいかないならチェックをしないでCMakeすることを検討すると良い**。この[stackoverflow](https://stackoverflow.com/questions/54840674/how-can-i-clear-error-lnk2001-in-vs2015-with-bullet-physics-sdk)の記事を見つけてようやくわかりました。~~正直この2行を伝えたくてこの記事を書いたのはある。~~

`USE_GLUT`：オフにしました
→GLUTのことはよくわからないけど、参考先でも外しているので外す

`USE_MSVC_RUNTIME_LIBRARY_DLL`:オフ
→Visualstudioで/MT、/MTdの条件で使えるようにするためにチェックしない。Dxlibと連携させたいのでチェックしない。Dxlibでは/MTを設定するので、Bulletもそれに合わせます。


※`BUILD_なんちゃら_DEMOS`、`BUILD_BULLET3`についてはオンのままでもいいかと思います。(デモについてはOpenGL.libみたいのが足りないとかって言われて一部ビルドするときにエラーが出ましたが、一部のデモは実行できたのと、Libファイルは作られたので良いかなと)

設定をしたらもう一度`Configure`、問題なければ`Generate`します。

##ステップ3　ビルド
`Home/build_cmake`下の`BULLET_PHYSICS.sln`を起動、ソリューションエクスプローラーにある`INSTALL`というプロジェクトを右クリック、Debug、Releaseのどちらについてもビルドします。~~それなりに時間かかります~~
エラーらしいエラーも出ずに、Home/build_cmake/lib/Debug、Release下にそれぞれのLibファイルが出来ていればビルド完了です！

##ステップ4　HelloWorld
VisualStudioで新しいプロジェクトを作ります。今回はC++から`空のプロジェクト`を作りましょう。名前は`BulletTest`とかって感じで。いい感じに。
[Github](https://github.com/bulletphysics/bullet3/tree/master/examples/HelloWorld)から`HelloWorld.cpp`をコピペしてきます。

続いてVisualStudioの設定をします。
`プロジェクト＞BulletTest`の設定...を開きます。
※設定する時に、構成はReleaseかDebugか全ての構成か、プラットフォームのビット数はx64かx86か、は注意して下さい。

①`構成プロパティ＞VC++ディレクトリ＞ライブラリディレクトリ`でビルドしたLibファイルにパスを通します。
②`構成プロパティ＞C/C++＞コード生成＞ランタイムライブラリ`でマルチスレッドDLL(/MD)とマルチスレッドデバッグDLL(/MDd)を設定します。
③`構成プロパティ＞リンカー＞全般＞追加のライブラリディレクトリ`でもビルドしたLibファイルにパスを通します。
④`構成プロパティ＞リンカー＞入力＞追加の依存ファイル`にビルドしたLibファイルのファイル名を入力します。

インクルードディレクトリについては`BulletTest`のソースファイルを書き換えてフルパスを指定しましたが、VisualStudioの設定の`VC++ディレクトリ`と`C/C++＞全般`にある項目の`追加のインクルードディレクトリ`にHome/srcを加える方が普通だと思います。

これでビルドが上手くいけば成功です！お疲れ様でした！