物理演算エンジン JBullet の利用と Android アプリ

JBulletとは、オープンソースの3D物理演算エンジンとして有名な Bullet の Java 版です。 物理演算エンジンを使うと、3次元物体の物理法則に従ったリアルな動きをコンピュータ上で簡単に実現することができます。 iPhoneやAndroidなどのスマートフォンには加速度センサーやジャイロセンサーが標準装備されていますので、 機器が傾いた時の角度や速度をリアルタイムに知ることが可能です。 このためスマートフォン用の物理演算エンジンを利用したゲームが数多くリリースされるようになりました。

ここでは、JBullet を利用するための環境について述べます。

■インストール環境: Windows 7 / Windows 8.1

Androidアプリ開発環境の構築の1~7までは設定済みであるとします。

  1. JBullet のダウンロード
  2. ここから jbullet-20101010.zip をダウンロードし、解凍する。 解凍してできたフォルダの中身をアクセス可能なフォルダ(ここでは c:\work\jbullet とする)にコピーする。

  3. JARファイルのコピー
  4. 以下の9個のJARファイルを c:\Program Files\Java\jre1.8.0_25\lib\ext と c:\Program Files\Java\jdk1.8.0_25\jre\lib\ext にコピーする。
    ※Windows が64bit版の場合は、c:\Program Files (x86)\Java\jre1.8.0_25\lib\ext と c:\Program Files (x86)\Java\jdk1.8.0_25\jre\lib\ext にコピーする。

    ・jbullet.jar (C:\work\jbullet\distフォルダにある)
    ・jbullet-demos.jar (C:\work\jbullet\distフォルダにある)
    ・asm-all-3.1.jar (C:\work\jbullet\lib\ASM3.1フォルダにある)
    ・stack-alloc.jar (C:\work\jbullet\lib\jstackallocフォルダにある)
    ・jinput.jar (C:\work\jbullet\lib\lwjglフォルダにある)
    ・lwjgl.jar (C:\work\jbullet\lib\lwjglフォルダにある)
    ・lwjgl_util.jar (C:\work\jbullet\lib\lwjglフォルダにある)
    ・swing-layout-1.0.3.jar (C:\work\jbullet\lib\swing-layoutフォルダにある)
    ・vecmath.jar (C:\work\jbullet\lib\vecmathフォルダにある)

    【注意】64bit版のJDKをインストールした場合、上記の jinput.jar と lwjgl.jar と lwjgl_util.jar の3個のJARファイルについては、 ここから lwjgl-2.2.2.zip をダウンロードし、このzipファイルに含まれるものをコピーする。 さらに、lwjgl-2.2.2.zip を解凍してできた native\windows フォルダを c:\work\jbullet にコピーする。
    ※lwjglのver.2.3以降は、JBullet-20101010 では使えない。

  5. JBullet Demo のコンパイルと実行(コマンドプロンプト版)
  6. c:\work\jbullet\src\com\bulletphysics\demos\basicフォルダをカレントディレクトリとしてコマンドプロンプトを開く。
    (この意味がわからない場合は、コマンドプロンプトを開き、
    cd \work\jbullet\src\com\bulletphysics\demos\basic
    を実行すればよい。)

    このフォルダにある BasicDemo.java をコンパイルするには、以下を実行する。

    javac BasicDemo.java

    設定に問題がなければ、エラーなしでコンパイルできるはずである。そして、以下のように実行する。

    java -Djava.library.path="c:\work\jbullet\lib\lwjgl\win32" com.bulletphysics.demos.basic.BasicDemo

    【注意】64bit版のJDKをインストールした場合は、以下のように実行する。

    java -Djava.library.path="c:\work\jbullet\windows" com.bulletphysics.demos.basic.BasicDemo

    ※BasicDemo.java はファイルの先頭部を読めばわかるように、com.bulletphysics.demos.basic という パッケージに属するよう宣言されている。よって、実行の際は、単に「java BasicDemo」ではなく 「java com.bulletphysics.demos.basic.BasicDemo」としなければならない。 また、このクラスは(c:\Program Files\Java\jre1.8.0_25\lib\ext などに置いた)lwjgl.jar を使用しており、 さらにこれは Windows の native code である(c:\work\jbullet\lib\lwjgl\win32 に置いた)lwjgl.dll を使用する。 lwjgl.jar は自動的に読み込まれるが、lwjgl.dll は -Djava.library.path オプションによってどこにあるかを 指定しなくてはいけない。ただし、環境変数PATHに -Djava.library.path で指定したフォルダを追加すると、 -Djava.library.path="..." の部分は省略可能となる。

    以上の操作により、次のようなデモが見られるはずである。右クリックすると手前から小キューブが発射されるので試していただきたい。
    BasicDemoのスクリーンショット1 BasicDemoのスクリーンショット2 BasicDemoのスクリーンショット3

  7. JBullet Demo のコンパイルと実行(eclipse版)
  8. ここでは、eclipse上で JBullet の Demo をビルドし、実行する方法を紹介しよう。

    eclipseの設定の変更: eclipseの[ウィンドウ]→[設定]を選択し、さらに[Java]→[コンパイラー]→[エラー/警告] を選び、「使用すべきではない制限されたAPI」の中の [禁止された参照(アクセス・ルール)] を「エラー」から「警告」に変更する。

    プロジェクトの作成: eclipseの[ファイル]→[新規]→[Javaプロジェクト]を選択し、「プロジェクト名」を「JBulletDemos」とし、[終了]をクリック。

    デモソースのインポート: 画面左側に現れるプロジェクトから[JBulletDemos]→[src]を選択し、右クリック→[インポート]→ [General]→[ファイル・システム]を選び[次へ]をクリック。 「次のディレクトリーから」の右側の[参照]ボタンから「C:\work\jbullet\src」を選択し、 下の[src]の左側にチェックを入れ、[終了]をクリック。

    ネイティブ・ロケーション・パスの設定: [JBulletDemos]→[JREシステム・ライブラリー]→[lwjgl.jar]を選択し、 右クリック→[プロパティ]→[ネイティブ・ライブラリー]の「ロケーション・パス」に「c:\work\jbullet\lib\lwjgl\win32」 を入力し、[適用]ボタン、さらに[OK]をクリック。

    【注意】64bit版のJDKをインストールした場合は、「ロケーション・パス」に 「c:\work\jbullet\windows」を入力する。

    ビルド: [JBulletDemos]→[src]→[com.bulletphysics.demos.basic]→[BasicDemo.java]をダブルクリックし、 メニューの[プロジェクト]→[プロジェクトのビルド]を選択。

    実行: [BasicDemo.java]を右クリック→[実行]→[Javaアプリケーション]で実行。

  9. Android用サンプルアプリのビルドと実行
  10. OpenGL ESからJBulletまで 3DAndroid入門@プロバナ のページで紹介されている JBullet を使った Android 用サンプルソースをビルドしてみよう。

    サンプルソースの入手: nullie/HelloGame のページにある「Download ZIP」をクリックして、サンプルソースをダウンロード。そして、c:\workフォルダに解凍する。

    プロジェクトのインポート: eclipseの[ファイル]→[インポート]を選択し、 さらに、[Android]→[Existing Android Code Into Workspace]を選択し、[次へ]をクリック。 [Browse]ボタンから c:\work\HelloGame-master を選び、「New Project Name」が「HelloGame」になっていること確認し、 [Copy projects into workspace]にチェックを入れて[終了]をクリック。

    ターゲットの設定: [HelloGame]プロジェクトを右クリック→[プロパティ]を選択し、[Android]設定の中の [Project Build Target]を[Android 4.4.2]に変更する。

    ライブラリーの登録: [HelloGame]プロジェクトを右クリック→[ビルド・パス]→[ビルド・パスの構成]を選択。 [ライブラリー]タブに登録されている jbullet.jar と vecmath.jar は除去し、[外部JARの追加]から
    ・C:\work\jbullet\dist\jbullet.jar
    ・C:\work\jbullet\lib\vecmath\vecmath.jar
    を追加する。さらに、[順序およびエクスポート]タブに移動し、jbullet.jar と vecmath.jar にチェックを入れる。

    ビルド: [HelloGame]プロジェクトを選択し、メニューの[プロジェクト]→[すべてビルド]を選択。

    実行: Genymotionを起動後、メニューの[実行]→[実行]→[Android Application]で実行。

    以上の操作により、次のように10個のキューブが床に落ちるアプリがGenymotion内で見れるはずである。
    HelloGameのスクリーンショット

まずは、このサンプルソースをしっかり理解することから始めるのがよいだろう。参考URL[3]は、この方向で 3D物理演算エンジンを使ったAndroidアプリの作成法を解説しており、大変勉強になると思う。

参考URL:

[1] JBullet - Java port of Bullet Physics Library

[2] GitHub nullie/HelloGame

[3] OpenGL ESからJBulletまで 3DAndroid入門@プロバナ


Last updated on January 9, 2015
Copyright(c) 2015, Mitsushi Fujimoto. All Rights Reserved.