XcodeでBullet SDKを使う
物理シミュレーションをする上で物理エンジンを使いたいなと思い、Bulletを試してみることにした。
最初はPhysXと迷った。相当迷った。
Position Based Fluids Demonstration - YouTube
このPhysXの流体シミュレーションを見てすごく感動した。
けど、調べてみるとPhysXってライセンス云々が面倒くさそう。
Bulletは商用でも自由に使用できるみたいだし、Bulletを使うことにした。
(この流れだとBullet大したことないんじゃね的に見えるけど、Bulletも普通にすごかったです。Soft Body Simultationできるし)
Bulletのダウンロード
Downloads - bullet - Bullet is a professional free 3D Real-Time Multiphysics Library - Google Project Hosting
こちらから。UNIX用ということで上の方のtgzをダウンロードしました。
ちなみに、この記事執筆時点では、最新バージョンは2.82みたい。
Bulletのビルド
ダウンロードして展開すると、ソースコードが入ってます。
いつものようにmakeしよう。
ちなみに、Bulletではcmakeを採用しているので、入ってない人はbrewなどで入れよう。
cd path/to/bullet mkdir bullet-build cd bullet-build 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
Xcodeプロジェクト側の設定
次は、XcodeのプロジェクトにBulletのFrameworkを紐づける。
プロジェクトは勝手に作ってもらうとして、既にプロジェクトはできている前提で話を進める。
Xcode左ペインのプロジェクト名をクリックするとプロジェクトの設定画面が出てくるので、Build Phasesを選択。
真ん中のLink Binary With LibrariesというところにBulletのFrameworkを追加すべく左下の「+」をクリックしてFrameworkを検索するんだけど、出てこない。
それもそのはず、ここで検索できるFrameworkのデフォルトのパスは
/System/Library/Frameworks
のFrameworkだけだからだ。それでもって、ユーザーがインストールしたFrameworkは
/Library/Frameworks
に入ってる。今回のBulletもそのディレクトリを見てもらえばインストールされてることがわかる。
それで、サンプルのHello worldをビルドする上で必要になるFrameworkが
- BulletCollision.framework
- BulletDynamics.framework
- LinearMath.framework
の3つ。これらをさっきのディレクトリからドラッグしてきてLink Binary With Librariesの上にドロップ。
すると、上の画像のように追加される。
こうするとBulletが使えるようになる。
補足
#include <btBulletDynamicsCommon.h>
というヘッダをincludeしているのだけれど、これはインクルードパスが通っている場合。
今はインクルードパスを通さずにFrameworkだけ直に投入したので、
#include <BulletDynamics/btBulletDynamicsCommon.h>
としてやる必要がある。
【参考】Creating a project from scratch - Physics Simulation Wiki
Bulletを使えば、たぶんポリゴンの設定をしてやれば勝手に衝突軌道とか計算してくれるし、なによりオープンソースで学習用にもなるので、なかなかよさそう。