WOW-Engine: オープンソースのActionScript3用3D物理エンジンライブラリ

WOW-Engineとは、3D空間上で物理演算するフレームワークである。座標計算とか、衝突計算とか、そういうことだけをWOWEngineはやってくれる。

3Dオブジェクトの描画はしてくれないので、3D空間に壁をつくるとか、球体を表示するとか、「表示をする」ならば、Papervision3Dとか、Sandyとかと組み合わせて作成必要だ。あくまでオブジェクトの位置関係を計算するだけだ。

WOWEngineを使う手順は以下の通り

  • WOWEngineを入手する
  • WOWEngineを初期化する
  • 物体を追加する
  • 物体を動かす
  • WOWEngineで計算する
  • 表示に反映する。

ad92c135a786cbe48fa2267d48527fbf

サンプルいろいろ(最近、アクセスできない場合は頻繁だよう、変わりにゴーグルコードサイトにアクセスできる)

Wow-Engineの導入と解説に関してはhttp://d.hatena.ne.jp/o_healer/20080315/1205573581に参考できる。

WOWEngineを初期化する

ここからは実際にWOWEngineを使う話。まずは、3D物理計算を行ってくれるエンジンである、「WOWEngine」のインスタンスを作成・初期化する必要がある。
以下のような感じで、クラスのメンバとして定義する。


private var wow:WOWEngine;
private var wowFloor:WBoundArea;
private var wowMiku:WSphere;
private var wowRin:WSphere;

このようにして宣言したWOWEngine関連のメンバを、次のように初期化する


wow = new WOWEngine();
wow.collisionResponseMode = wow.SELECTIVE;
wow.addMasslessForce(new WVector(0, 0, 0));//常にかかり続ける力
wow.damping = 1;
wowFloor = new WBoundArea(FLOOR_WIDTH , FLOOR_HEIGHT , FLOOR_DEPTH);
wowFloor.setPosition(0, FLOOR_HEIGHT / 2, 0);//位置
wowFloor.elasticity = 1;//弾性
wowFloor.friction = 0.050;//摩擦
wow.setBoundArea(wowFloor);

物体を追加する

物理計算を行ってくれるWOWEngine自体の初期化が完了したら、そこに物体を加えていく。今回はミクとリンの2物体を追加すればよい。初期化時の


private var wowMiku:WSphere;
private var wowRin:WSphere;

を使う。以下は、かぐぁみねリンが床面に降り立つ→WOWEngineの物体定義の処理を行っている部分。


Tweener.addTween(rin , { y:0 , time:4 , onComplete:function():void {
wowRin = new WSphere(rin.x , rin.y , rin.z , 60 , false , 43 , 0.65);
wow.addParticle(wowRin);
}
} );

物体を動かす


private function wowMoveModel(target: displayObject3D , wowTarget:WSphere , point:Number3D):void {
var dx:Number =0;
var dz:Number = 0;
var rad:Number = 0;
if (target && wowTarget && point) {
dx = target.x – point.x; //(1)
dz= target.z – point.z; //(1)
rad = Math.atan2(dx , dz) * 180 / Math.PI; //(2)
target.rotationY = rad; //(2)
wowTarget.velocity = new WVector(-1 * dx / 4 , 0 , -1 * dz / 4);//(3)
}
}

チュートリアル

関連エントリ

グーグルコード

Leave a Reply

Your email address will not be published. Required fields are marked *