Visual Studio C++ 2008 Express Edition(VC++2008EE)でODE
インストール方法を紹介。
VC++EEインストール
まずはVC++EEをダウンロード。(無償です)
- http://www.microsoft.com/japan/msdn/vstudio/Express/
オンラインでインストールする、もしくはオフライン(DVDイメージ)でインストールする方法があるようです。
ODE準備
下記のリンクからODEをダウンロード。
- http://sourceforge.net/projects/opende/files/
ode-0.11.1.zip (2009/11時点で最新)
とりあえず、展開。デスクトップでもかまわないです。
プロジェクト作成
次に、ビルドするための準備としてプロジェクトを作成します。
\ode-0.11.1\build\ フォルダ下にpremake4.exeがあることを確認してください。
\ode-0.11.1\build\ フォルダ下にpremake4.exeがあることを確認してください。
コマンドプロンプト(スタート→すべてのプログラム→アクセサリ→コマンドプロンプト)
を開いて、\ode-0.11.1\build\ のフォルダまで移動します。
を開いて、\ode-0.11.1\build\ のフォルダまで移動します。
例)
> cd C:\Users\bambooflow\Desktop\ode-0.11.1\build
移動したらコマンドプロンプトにて下記を実行します。
> premake4.exe --with-demos --with-tests vs2008
VC++2008EEなので、vs2008です。
--with-demosをつけると、付属するサンプルプログラムも一緒にビルドされます。
--with-testsを実行すると、ODEのテストをビルドします。(<=テストなので別に必要ないかも)
--with-testsを実行すると、ODEのテストをビルドします。(<=テストなので別に必要ないかも)
- バッチ実行(コマンドプロンプトを開かない)
わたしは、コマンドプロンプトを開いて作業するのが面倒だったので、バッチファイルを作って実行しました。
run.bat
\ode-0.11.1\build において実行してください↓
ビルド
プロジェクト生成がうまくいくと、\ode-0.11.1\build のしたに\vs2008 フォルダができます。
その中に、ode.vcproj というファイルがあるのでこれを開きます。(VC++を立ち上げます)
その中に、ode.vcproj というファイルがあるのでこれを開きます。(VC++を立ち上げます)
次にソリューションの構成を選択します。
ソリューションの構成はいくつかありますが、ここでは、倍精度のDLLのやつで"DebugDoubleDLL"を選んでみます。
ソリューションの構成はいくつかありますが、ここでは、倍精度のDLLのやつで"DebugDoubleDLL"を選んでみます。
<補足>
推奨は、倍精度の静的ライブラリだそうです。(単精度はエラーが起きやすいらしい)
速度面で最適化が掛かっているものがほしい場合は、DebugよりもReleaseを選ぶとよさそうです。(Releaseは最適化オプション"実行速度 (/O2)"が有効)
私は"ReleaseDoubleDLL"あたりを選びました。
ちなみに、*DLLを選択するとode_doubled.dllができます。
推奨は、倍精度の静的ライブラリだそうです。(単精度はエラーが起きやすいらしい)
速度面で最適化が掛かっているものがほしい場合は、DebugよりもReleaseを選ぶとよさそうです。(Releaseは最適化オプション"実行速度 (/O2)"が有効)
私は"ReleaseDoubleDLL"あたりを選びました。
ちなみに、*DLLを選択するとode_doubled.dllができます。
すべてコンパイルする場合は、メニュー→ビルド(B)→ソリューションのビルド(B) とすればできます。
(もし、odeライブラリだけ生成するのであれば、ソリューションエクスプローラから"ode"を右クリック→スタートアッププロジェクトに設定(A)、"ode"を右クリック→ビルド(U) でできます)
- ビルド完了結果
ビルドが正常に完了すると、\ode-0.11.1\lib\DebugDoubleDLL フォルダ下にodeライブラリやサンプルプログラムのオブジェクトファイル等が生成されます。
(ソリューション構成にあわせて"DebugDoubleDLL"を読み替えてください。)
(ソリューション構成にあわせて"DebugDoubleDLL"を読み替えてください。)
試しに、demo_buggy.exe を実行しています。
ODEライブラリのインストール(ライブラリのコピー)
ODEを使用するために必要となるのは次のファイルとなります。
DebugDoubleDLLビルド時
- \ode-0.11.1\include\ode\
- \ode-0.11.1\lib\DebugDoubleDLL\ode_doubled.lib (Releaseでは、ode_double.lib)
- \ode-0.11.1\lib\DebugDoubleDLL\ode_doubled.dll (Releaseでは、ode_double.dll)
DebugDoubleLibでビルド時では、DLLなし。
(ソリューション構成にあわせて"DebugDoubleLib"を読み替えてください。)
(ソリューション構成にあわせて"DebugDoubleLib"を読み替えてください。)
以下の場所にコピーします。
<odeライブラリ インストール>
- \ode-0.11.1\include\ode\(フォルダごと)
→ C:\Program Files\Microsoft Visual Studio 9.0\VC\include - \ode-0.11.1\lib\DebugDoubleDLL\ode_doubled.lib
→ C:\Program Files\Microsoft Visual Studio 9.0\VC\lib - \ode-0.11.1\lib\DebugDoubleDLL\ode_doubled.dll
→ C:\Windows\system(もしくはC:\Windows\system32)
あと、OpenGLグラフィック補助ライブラリとしてdrawstuffなるものがあります。
一緒にインストール(コピー)しておきます。
一緒にインストール(コピー)しておきます。
<drawstuffライブラリ インストール>
- \ode-0.11.1\include\drawstuff(フォルダごと)
→ C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ - \ode-0.11.1\lib\DebugDoubleDLL\drawstuffd.lib
→ C:\Program Files\Microsoft Visual Studio 9.0\VC\lib - \ode-0.11.1\lib\DebugDoubleDLL\drawstuffd.dll
→ C:\Windows\system(もしくはC:\Windows\system32)
人によっては、上記のフォルダを汚したくないと言うかも。
そういう場合は、別の方法としてソースと同じフォルダにコピーするとか、パス設定するという方法があると思います。(ここでは説明省略)
私は、いちいち設定が面倒だったので一番手っ取り早い上記の方法でやりました。
そういう場合は、別の方法としてソースと同じフォルダにコピーするとか、パス設定するという方法があると思います。(ここでは説明省略)
私は、いちいち設定が面倒だったので一番手っ取り早い上記の方法でやりました。
これで、準備完了。
試しにサンプルをコンパイルしてみる
- VC++を立ち上げる
<プロジェクト作成>
- ファイル(F)→新規作成(N)→プロジェクト(P)
- CLR 空のCLRプロジェクトを選択
- プロジェクト名:test_ode01
- CLR 空のCLRプロジェクトを選択
<ソースコード追加>
- ソリューションエクスプローラからtest_ode>ソースファイルを右クリック
- 追加(D)→新しい項目(W)
- C++ ファイル(.cpp) を選択
- ファイル名:test_ode01.cpp
- C++ ファイル(.cpp) を選択
- 追加(D)→新しい項目(W)
<プロジェクトの設定>
- プロジェクト(P)→プロパティ(P)
- 構成プロパティ>全般
- ランタイムライブラリ:マルチスレッドデバッグ(/MTd)
(DLLの場合は、マルチスレッド デバッグ DLL (/MDd) ?)
- ランタイムライブラリ:マルチスレッドデバッグ(/MTd)
- 構成プロパティ>C/C++>プリプロセッサ
- プリプロセッサの定義:WIN32;_DEBUG;dDOUBLE
- 構成プロパティ>リンカ>入力
- 追加の依存ファイル:$(NoInherit) ode_doubled.lib drawstuffd.lib
- 構成プロパティ>全般
"Release"でビルドした場合は、ode_double.lib drawstuff.libを指定します。
残念なことに、drawstuffは指定されたテクスチャ画像が必須です。
なので、プロジェクトファイルに必要なテクスチャ画像が入ったフォルダをコピーします。
例)
\ode-0.11.1\drawstuff\textures(フォルダごと)→ C:\Users\bambooflow\Documents\Visual Studio 2008\Projects\test_ode01
なので、プロジェクトファイルに必要なテクスチャ画像が入ったフォルダをコピーします。
例)
\ode-0.11.1\drawstuff\textures(フォルダごと)→ C:\Users\bambooflow\Documents\Visual Studio 2008\Projects\test_ode01
- デバッグ(D)→デバッグ開始(S)
#ifdef WIN32
#include <windows.h>
#endif
#include <ode/ode.h>
#include <drawstuff/drawstuff.h>
static dWorldID world; // 世界ID
static dBodyID box; // 剛体ID
dReal box_sizes[3] = { 1.0, 1.0, 1.0 };
// 剛体のサイズ
#ifdef dDOUBLE
#define dsDrawBox dsDrawBoxD
#endif
// start simulation - set viewpoint
static void start()
{
static float xyz[3] = { 0.f, 5.f, 3.f };
static float hpr[3] = { -90.f, -15.f, 0.f };
dsSetViewpoint( xyz, hpr ); // カメラ位置と方向設定
}
// simulation loop
static void simLoop( int pause )
{
// Ctl+p が押されたらifに入らない
if (!pause)
{
dWorldStep( world, 0.01 ); // 世界を進める
}
// 剛体の表示
dsSetColor( 1.0f, 1.0f, 0.0f ); // RGB Color
dsDrawBox( dBodyGetPosition( box ),
dBodyGetRotation( box ),
box_sizes );
}
int main( int argc, char* argv[] )
{
dInitODE();
// setup pointers to drawstuff callback functions
dsFunctions fn;
fn.version = DS_VERSION;
fn.start = &start;
fn.step = &simLoop;
fn.command = 0;
fn.stop = 0;
fn.path_to_textures = "textures";
world = dWorldCreate(); // 世界生成
//dWorldSetGravity( world, 0.0, 0.0, -9.8 );
// 世界に重力を生成(z方向に-9.8m/s/s)
box = dBodyCreate( world ); // 世界に剛体を作成
dReal pos[3] = { 0.0, 0.0, 3.0 };
dBodySetPosition( box, pos[0], pos[1], pos[2] );
// 剛体の位置を設定
dsSimulationLoop( argc, argv, 320, 240, &fn );
// シミュレーション開始(simLoopへ)
// + ウィンドウサイズ設定
dWorldDestroy( world ); // 世界の破壊
dCloseODE();
return 0;
}