サンプル

ボーンの変換行列取得による物持たせ

歩いているキャラクタに別モデルの物を持たせる、というサンプルです。 キャラクタに物を持たせる場合、右手のボーンにあわせて物を設置することになります。このとき、ワールド座標系から右手のボーン座標系への変換行列が必要です。このサンプルでは、対象のボーンにバウンディングボリューム(BV)を設定し、BVの変換行列を取得することで、間接的にボーンの変換行列を取得しています。

目次


ボーン変換行列取得のサンプルコード

ここでは、ボーンの変換行列の取得を中心にサンプルコードを説明します。 まず、対象のボーンにBVを設定します。このBVは変換行列を取得するために設定するだけなので、ボーンにあわせて作成する必要はなく、適当な形状でかまいません。


// BVFigureの作成とアクションの設定
bvFigure = BVBuilder.createBVFigure( figure );
bvFigure.setAction( action, frame );

// 適当なBoundingVolumeを作成し、手に設定する
bvHand = new Sphere( 1.f );
bvFigure.setBV( bvHand, handBoneId );

また、BVをボーンに合わせて動かすために、BVFigureにFigureと同じフレーム時間・変換行列を設定します。

// フレーム時間の設定
figure.setTime( frame );
bvFigure.setTime( frame );

// BVFigureにFigureの変換行列をセット
bvFigure.setTransform( trans );

そして、ボーンに設定したBVから変換行列を取得し、アイテムを描画します。

// 手のボーンの変換行列の取得
player.bvHand.getTransform( Shape.TRANS_BV_WORLD_NOSCALE,
itemTrans );

// アイテムの描画
g3.renderObject3D( itemGroup, itemTrans );


Hold Item実行画面
Hold Item実行画面


このページの先頭へ戻る