• スポンサードリンク

物理演算エンジンBulletで遊んでみたくて-3

Android Bullet NDK SurfaceView 物理演算

前回の記事「物理演算エンジンBulletで遊んでみたくて-2」でJavaから物理演算エンジンBulletを呼び出すライブラリを使って、簡単なデモを作ってみました。

それを見て、いろんな疑問がわいたんじゃないかということで、ちょっと説明したいと思います。

  • オブジェクトの生成をするだけで、描画はしなくていいの?
  • オブジェクトを生成するだけで破棄はしなくていいの?
  • 物理演算の計算実行は呼ばなくていいの?
  • 物理演算の長さとか重さの単位は何?

などなど。

1.オブジェクトの生成をするだけで、描画はしなくていいの?

先日のデモのコードではオブジェクトを生成するだけで、描画処理は何も実装していません。
にも関わらずアプリを実行すると、生成したオブジェクトが物理演算・描画されていました。
その処理の秘密は、GLBulletActivityとGLBulletWorldSurfaceView内に有ります。
この2つのクラスで提供されるデフォルトの表示で良ければ、自前で描画処理を実装する必要はありません。
物理演算あるいは物理演算エンジンBulletで遊んでみようとすると、物理演算そのものに必要な事よりも、描画や入力の処理、オブジェクトの生成・破棄、アクティビティ(ウインドウ)のライフサイクルに伴った処理など、その他の処理に係る部分が圧倒的に多くなります。それじゃぁせっかく物理演算への興味も萎えてしまうよねってことで、最低限の処理はライブラリ内に用意しました。もちろんもっと低レベルのクラス・メソッドも用意しているので、ちゃんとテクスチャを貼り付けて描画をしたいなんてのも可能です。

2.オブジェクトを生成するだけで破棄はしなくていいの?

#destroyObjectsなんていう、いかにもオブジェクトの破棄をするためのメソッドがありますが、先日のデモのコードでは何も実装しませんでした。本来は破棄しないといけないのですが、GLBulletActivityが破棄される際に、残っているオブジェクトは全て破棄するようにしているため、
ライブラリを使う側では殆どの場合何もしなくて済みます。

3.物理演算の計算実行は呼ばなくていいの?

GLBulletWorldSurfaceView内で描画処理の前に物理演算を実行するようになっています。

4.物理演算の長さとか重さの単位は何?

ほとんどの物理演算エンジンはそうだと思うのですが、長さとか重さや時間その他の単位は決まってません。作り上げた世界内で統一さえしていれば、長さがセンチメートルでもミクロンでも構わないのです。
ただし、世界内で統一と言うのは長さの単位だけを合しておけば良いという単純なものでは無く、長さの単位を変えれば、例えば重力加速度もそれに合わせた単位で設定しないとダメということです。
例えば地球上の重力加速度はおよそ9.8[m/s2]ですが、これは長さの単位を[m](メートル)にしている時の値なので、仮に長さの単位を[cm](センチメートル)にしたいのであれば、重力加速度の値として、980[cm/s2]にしないといけません。更に時間の単位を[ms](ミリ秒)にするには、9.8×10-4[cm/ms2]にしないといけません。
面倒ですよね。なので通常は、長さは[m](メートル)、重さは[kg](キログラム)、時間は[s](秒)とするのが一般的でしょう。

と言うことでおしまい、としたいところですが、そんな事ではごまかされないぞって人のために、今回は、自前で描画処理をするためのサンプルを作ってみましょう。前振りが長すぎでしたね。

« »

  • スポンサードリンク

%d人のブロガーが「いいね」をつけました。