Help us understand the problem. What is going on with this article?

Bullet Physicsの導入

More than 1 year has passed since last update.

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
をインクルードし
次のコードを追加してプロジェクトをビルドしてみます

test.cpp
    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の導入記事が見当たらなかったので今回の記事を書いてみました
公式のどこかに書いてあったのかな?

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away