ボーンの変換行列取得による物持たせ
歩いているキャラクタに物を持たせるサンプルです。
目次
サンプルでは、右手のボーンに合わせて物を設置しています。このとき、ワールド座標からボーン座標への変換行列が必要になります。このサンプルでは、対象のボーンにバウンディングボリューム(BV)を設置し、BVの変換行列を取得することで、間接的にボーンへの変換行列を取得しています。
1. mcxBVFigure に対して、変換行列を取得したいボーンにバウンディングボリュームを設定
mcxBVFigurex *pbvfig;
mcxBoundingVolumex *pbvBone;
/*----- Shapeインスタンスの作成 -----*/
/*----- BVFigure -----*/
pMe -> mcx_data.pbvfig = IMICRO3D_mcx_BVBuilder_createBVFigureOnlyBonex ( pMe -> pIM3D,
/*----- Bone BoundingVolume -----*/
pMe -> mcx_data.pbvBone = IMICRO3D_mcx_BVBuilder_createBoneBVx ( pMe -> pIM3D,
/*----- 特定のボーンにバウンディングボリュームを設定する -----*/
IMICRO3D_mcx_BVFigure_setBVToBonex ( pMe -> pIM3D,
mcxBoundingVolumex *pbvBone;
/*----- Shapeインスタンスの作成 -----*/
/*----- BVFigure -----*/
pMe -> mcx_data.pbvfig = IMICRO3D_mcx_BVBuilder_createBVFigureOnlyBonex ( pMe -> pIM3D,
pMe -> pAlc,
&pMe -> mc_data.figure_player,
&e ) ;
&pMe -> mc_data.figure_player,
&e ) ;
/*----- Bone BoundingVolume -----*/
pMe -> mcx_data.pbvBone = IMICRO3D_mcx_BVBuilder_createBoneBVx ( pMe -> pIM3D,
pMe -> pAlc,
&pMe -> mc_data.figure_player,
BONE_ID,
0,
MCX_SHAPE_TYPE_SPHERE,
4096,
MCX_BV_ROTATE_NONE,
&e ) ;
&pMe -> mc_data.figure_player,
BONE_ID,
0,
MCX_SHAPE_TYPE_SPHERE,
4096,
MCX_BV_ROTATE_NONE,
&e ) ;
IMICRO3D_mcx_BVFigure_setBVToBonex ( pMe -> pIM3D,
pMe -> mcx_data.pbvfig,
pMe -> mcx_data.pbvBone,
BONE_ID,
&e ) ;
pMe -> mcx_data.pbvBone,
BONE_ID,
&e ) ;
2. 設定したバウンディングボリュームに対して、 mcx_BoundingVolume_getTransformx を用いて変換行列を取得
/*----- 変換行列を取得 -----*/
IMICRO3D_mcx_Shape_getTransformx ( pMe -> pIM3D,
IMICRO3D_mcx_Shape_getTransformx ( pMe -> pIM3D,
( mcxShapex* ) pMe -> mcx_data.pbvBone,
MCX_TRANS_SHAPE_WORLD_NOSCALE,
&pMe -> mcx_data.shape_trans,
&e ) ;
MCX_TRANS_SHAPE_WORLD_NOSCALE,
&pMe -> mcx_data.shape_trans,
&e ) ;
取得した変換行列は、持たせたい物のモデルの行列と乗算し、Renderにセットします。

Hold Item実行画面

