BPSGR (jBullet for ProceSsinG R)

物理演算ライブラリBulletのJava版(ラッパー)である、Jbulletを手軽に使える様に、Processingから扱えるようにしたライブラリです

このライブラリの目的

Bulletはフリーで高性能な物理演算ライブラリですが、いろいろ設定もしなくてはならず、手軽に使うには非常にハードルが高いものでした。
また、デモなどを動かしても、それから先自分で使いこなすにはなかなか長い道のりです。

ちょっとした物理シミュレーションを簡単にできないかな?と思い、 Bulletライブラリの膨大な機能のうちの、ものすごく初歩的な部分のみですが、非コンパイルのプログラム環境Processingで扱えるようにしました。

また、メタセコイアデータを、頂点データ集合として扱い、物体として登録できる機能も付加しています。
※本ライブラリは、BPSGR.jar, BPSGR_MQO.jarの2つから成ります。
同梱されているファイルのうち、Jbullt.jarは、jbulletのre-distribution、vecmath.jarは、JAVA3Dのre-distributionになります。
また、BPSGR_MQO.jar(メタセコイア関連部分)は、mqoviewer for processing(reco作)を、このライブラリで使用できるように機能拡張したのもので基本的内容は同一です。

このライブラリでできること。


○平面の作成(必ず作成されます)
○シミュレーションの結果をProcessingを用いて描画する
○球・箱・シリンダー・メタセコイアデータを剛体としてBullet空間への追加
○箱の集合体(BoxArray?)の簡単な作成
○球・箱・シリンダー・メタセコイアデータのshooting(指定した方向に投げる(撃つ事が可能です))
○指定した物体に対して、衝撃(impulse)を与える
○光源位置、メタセコデータ以外のオブジェクトの色に関しては、固定実装です(将来は自由にいじれるようにします)
 (オブジェクト番号偶数が黄色、奇数がシアンになります)

物理演算ライブラリの一つの重要な機能、拘束(Constrain)については、このバージョンでは未実装です。 (実装検討中)

各種サンプルがあります。 このページだけでは多くを伝えるのは困難なので、 このライブラリの使い方に関しては、製作作品・サンプルプログラムを見てください。こちら


Download

BPSGR V0.01

サンプルプログラムのページ

こちら

関数リファレンス

BPSGR V0.01
変更履歴

Processingでの使い方

インストール

配布ZIPのlibフォルダにあるjarファイルを、自分が使うProcessingソースのソースフォルダ(またはcodeディレクトリ下)または、
ProcessingのLibraliesディレクトリにコピーします(こちらに置く場合は
Processingのライブラリディレクトリにおく場合は、jp/nytla/kGLModeフォルダを作成して、その中にNyARMQO.jarをおいてください。
※本ライブラリは、BPSGR.jar, BPSGR_MQO.jarの2つから成ります。
同梱されているファイルのうち、Jbullt.jarは、jbulletのre-distribution、vecmath.jarは、JAVA3Dのre-distributionになります。
既にお持ちの場合は、コピーの必要はありません。

定義セクション

import processing.opengl.*;

import javax.media.opengl.*; 
import javax.media.opengl.glu.*;
import javax.vecmath.Vector3f;
import com.bulletphysics.dynamics.RigidBody;

import BPSGR.*;

グローバルセクション

//BPSGRの宣言
BPSGR demo;

//カメラ位置始点の設定(drawセクションで指定しても良い)
Vector3f cameraPosition = new Vector3f(0f, 1000f, 350f);
Vector3f cameraTargetPosition = new Vector3f(0f, 0f, 0f); // look at

setupセクション

//クラスの生成
  PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;  // g may change
  GL gl = pgl.beginGL();  // always use the GL object returned by beginGL

//OpenGLのハンドルを渡す必要あり
  demo = new BPSGR(this, gl);

  pgl.endGL();

//物理空間の初期化(&平面の生成)
  demo.initPhysics();

//空間に物体の追加(下記例は、箱集合を設置している)
    demo.putBoxArray( 0, 0, 0, 16, 10, 16, 0.1 ,2);

drawセクション


//シミュレーションStepの指定
//この数値によって、シミュレーションの速度が変わります
    demo.dynamicsWorld.stepSimulation(ms / 1000000f);

//描画部分
  PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;  // g may change
  GL gl = pgl.beginGL();  // always use the GL object returned by beginGL

//Perspectiveの設定(beginGLの際にPerspectiveが変わってしまうため、drawセクションで毎回呼ぶ必要あり)
  BPSGR.setPerspective(gl, width, height);

//視点の設定(動的に変更する必要が無ければ、setupセクションに置くのも可)
  glu.gluLookAt(cameraPosition.x,cameraPosition.y,cameraPosition.z
                , cameraTargetPosition.x, cameraTargetPosition.y, cameraTargetPosition.z
                , 0, 1, 0);

  gl.glPushMatrix();  

// レンダリング
  demo.render();

  gl.glPopMatrix();  

  pgl.endGL();

ドキュメンテーションはなかなか時間がなくて追いつかないので、
詳しくはサンプルプログラムの方をを見てください。


[変更履歴]

V0.01 2009/06/12
とりあえず公開

========================
・著作権とライセンス
コアの部分の、パッケージBPSGR.kGLModel部分は、
A虎@nyatla.jpさんの著作物、NyARMqoViewerのMetaseqファイルを扱う部分をベースに拡張してあります。
このNyARMqoViewerは、keiさんの著作物にA虎@nyatla.jpさんが改変を加えたものです。
この部分のライセンスはkeiさんのそれに従います。

Jbulletは、jbulletの配布条件に準じます(http://jbullet.advel.cz/) ZLIBライセンスです。

また、BPSGR内の描画を行うクラス(JBDrawGL)は、
JBulletのサンプルソース('com.bulletphysics.demos.opengl'の'LWJGL.java' and 'GLShapeDrawer.java')を参考に、
Processing用に対応したものです。(原作はLWJGL用)

vectmath.jarは、JAVA3Dのライブラリで、配布条件はそちらに準じます

このライブラリ自体はMITライセンスで配布します。ライセンスに関しては、licence.txtを参照してください。
ソースコード毎の著作権は、ソースコードの先頭部分を見てください。

Author: Reco
Contact: recomemos@gmail.com (@は小文字に直してください。)
ブログの方にコメントを戴いても結構です。
ブログ
RECO-MEMO"

Counter