2012年9月23日日曜日

Installation of Open Dynamics Engine to iMac

Introduction 

Recently I installed the Open Dynamics Engine(ODE) to my iMac and compiled its sample program on the Xcode. In this page, I describe my procedure to do so.

Development Environment 

  1. iMac
  2. Mac OS X 10.8.1
  3. Processor:3.06GHz Intel Core 2 Duo
  4. Memory:4GB
  5. Xcode4.4.1

Installation 

It's simple because the Macports supports the ODE. The ODE consists of two libraries:
  1. the library to calculate the rigid body dynamics, which is called "ode"
  2. the library to draw the dynamics by use of the OpenGL, which is called "drawstuff"
The Macports installs only "ode." As I also want to use "drawstuff", I downloaded the source code of ODE from here. Here are its installation instructions. At this point, the script warned that there is no libtoolize. I enabled statements from the 36th line to the 38th one in autogen.sh. The comments in the script tell us that the libtoolize corresponds to glibtoolize in Mac. I tried again. In turn, it's successful. The procedure compiles not only the "drawstuff" but also the "ode." I don't need the "ode" because it's already installed by the Macports. I manually copied the "drawstuff" as follows: The preparation to compile a sample program is completed.

Interface of ODE 

Here is the following statement: Though the library itself is written in C++, it appears that the library is more in favor of being used through the C interfaces. But, my favorite language is C++...

Sample Program 

Here is a beginner course of the ODE in Japanses. Using C++, I rewrote the sample source code "サンプルプログラム6マルチ" in the 6th chapter of the course. This page gives us an explanation about the C interfaces, but I could not find the corresponding page to the C++ ones. Fortunately the "ode" library provides us with the header file "odecpp.h." It helps me rewrite the sample in the C++. My source code is as follows: A path in the 10th line is the path to a directory included in the ODE source code.

Compile Options 

Header Search Path:
Path Purpose
/opt/local/include/ to include ode header
/usr/local/include/ to include drawstuff header

Library Search Path:
Path Purpose
/opt/local/lib to find "ode" library
/usr/local/lib to find the "drawstuff" library

Other Linker Flags:
-lode -ldrawstuff -framework OpenGL -framework GLUT

Apple LLVM compiler 4.0 - Language:
C++ Language Dialect C++11 [-std=c++11]
C++ Standard Library libc++ (LLVM C++ standard library with C++11 support)

Run 

Red balls fall to the ground, and bounce. The variable contact.surface.bounce in the 55th line corresponds to the reflection coefficient. When it equals to 1, the completely-elastic collision is realized. The range is [0, 1].

2012年9月18日火曜日

Open Dynamics EngineのMacへのインストール

はじめに 

物理エンジンのオープンソースOpen Dynamics Engine(ODE)をXcodeで動かしてみました。

開発環境 

  1. iMac
  2. Mac OS X 10.8.1
  3. Processor:3.06GHz Intel Core 2 Duo
  4. Memory:4GB
  5. Xcode4.4.1

インストール 

macportsにあるので簡単です。 ODEは2つのライブラリから構成されています。
  1. 剛体の力学を計算するライブラリ(ode)
  2. 描画するライブラリ(drawstuff)
上記のportでインストールされるのはodeのみです。drawstuffもインストールしたいのでここからソースを取ってきます。インストール方法はここにあります。 ここで、libtoolizeがない!というエラーが出ました。 autogen.shの36行目から38行目までのコメントアウトを外します。Macではlibtoolizeはglibtoolizeに相当すると書いてあります。 再度挑戦。 今度は上手く行きました。odeとdrawstuffがコンパイルされています。odeは既にportで入れたので、drawstuffだけを手でコピーしました。 これでサンプルを動かす準備が整いました。

ODEのインターフェース 

ここ にこんな文章があります。 ライブラリ自身はC++で書かれていますが、Cインターフェースを使って欲しいというのが作者の願いのようです。でも、やっぱりC++で書いてみたいです。

サンプルプログラム 

こちらにODEの初級講座があります。これの第6回のソース「サンプルプログラム6マルチ」をC++で書き直してみました。Cインターフェースの解説はこちらにありますが、C++の解説はありません。ですが、odecpp.hなるヘッダが提供されています。これを見ながら実装しました。すこし長いですが全文を貼付けます。10行目のパスは、ODEのソースに含まれているディレクトリへのパスです。drawstuffはOpenGLを使って実装されているので、得意な人にとっては扱いやすいと思います。ソースの解説は...もう少し精通してからにします。

コンパイルオプション 

Header Search Path:
パス 目的
/opt/local/include/ odeヘッダー
/usr/local/include/ drawstuffヘッダー

Library Search Path:
パス 目的
/opt/local/lib odeライブラリ
/usr/local/lib drawstuffライブラリ

Other Linker Flags:
-lode -ldrawstuff -framework OpenGL -framework GLUT

Apple LLVM compiler 4.0 - Language:
C++ Language Dialect C++11 [-std=c++11]
C++ Standard Library libc++ (LLVM C++ standard library with C++11 support)

実行 

並んだ赤玉が地面に着地して弾みます。55行目のbounceが反発係数です。1のとき完全弾性衝突です。0から1までの間の値を設定します。