サンプル
視錐台による可視判定
MascotCapsule エクステンション Collision Packageでは、可視判定を行うことが可能です。視体積(View Volume)にバウンディングボリューム(BV)が含まれているか否かを判定することで、可視判定を行います。
目次
サンプルでは視錐台にそれぞれのバウンディングボリュームが含まれていれば、テキストが表示されます。
1.ViewVolume構造体の作成と視錐台の設定
ViewVolume構造体の作成には、IMICRO3D_mcx_ViewVolume_createx()を使用します。
mcxViewVolumex *pviewvolume;
pMe -> mcx_data.pviewvolume = IMICRO3D_mcx_ViewVolume_createx( pMe -> pIM3D, pMe -> pAlc, &e );
pMe -> mcx_data.pviewvolume = IMICRO3D_mcx_ViewVolume_createx( pMe -> pIM3D, pMe -> pAlc, &e );
可視判定を行うためには、3D描画のためのカメラと同じようにNear Clip、Far Clip、画角の設定を行う必要があります。IMICRO3D_mcx_setPerspectiveViewFromAngle()で視野角から視錐台の設定を行います。
また、視錐台を設定した後、カメラ座標への変換行列を設定する必要があります。カメラ座標への変換行列の設定は、IMICRO3D_mcx_ViewVolume_setTransformx()を使用します。
/*----- 視錐台による判定 -----*/
/*----- ViewVolumeの設定 -----*/
IMICRO3D_mcx_ViewVolume_setPerspectiveViewFromAnglex( pMe -> pIM3D,
/*----- 視錐台を変換行列に設定 -----*/
IMICRO3D_mcx_ViewVolume_setTransformx( pMe -> pIM3D,
/*----- ViewVolumeの設定 -----*/
IMICRO3D_mcx_ViewVolume_setPerspectiveViewFromAnglex( pMe -> pIM3D,
pMe -> mcx_data.pviewvolume,
CAM_NEAR,
CAM_FAR,
CAM_ANGLE,
pMe -> cxScreen,
pMe -> cyScreen,
&exception);
CAM_NEAR,
CAM_FAR,
CAM_ANGLE,
pMe -> cxScreen,
pMe -> cyScreen,
&exception);
/*----- 視錐台を変換行列に設定 -----*/
IMICRO3D_mcx_ViewVolume_setTransformx( pMe -> pIM3D,
pMe -> mcx_data.pviewvolume,
&pMe -> mc_data.view_trans,
&e);
&pMe -> mc_data.view_trans,
&e);
2.BVFigure 全体に対するバウンディングボリュームの設定
BVFigure に対する可視判定にはあらかじめ BVFigure クラス全体に対するバウンディングボリュームを設定する必要があります。
mcxBVFigurex *p_bvfig;
mcxBoundingVolumex *pbv;
/*----- Shapeインスタンスの作成 -----*/
/*----- BVFigure -----*/
pMe -> mcx_data.pbvfig = IMICRO3D_mcx_BVBuilder_createBVFigureOnlyBonex( pMe -> mcx_data.pbvfig
/*----- 3Dデータを内包するバウンディングボリュームの作成 -----*/
IMICRO3D_mcx_BVFigure_calculateBVx( pMe -> mpMicro3D,
mcxBoundingVolumex *pbv;
/*----- Shapeインスタンスの作成 -----*/
/*----- BVFigure -----*/
pMe -> mcx_data.pbvfig = IMICRO3D_mcx_BVBuilder_createBVFigureOnlyBonex( pMe -> mcx_data.pbvfig
pMe -> pAlc,
&pMe -> mc_data.figure,
&e );
&pMe -> mc_data.figure,
&e );
/*----- 3Dデータを内包するバウンディングボリュームの作成 -----*/
IMICRO3D_mcx_BVFigure_calculateBVx( pMe -> mpMicro3D,
pMe -> p_bvfig,
MCX_SHAPE_TYPE_BOX,
4096,
&exception);
MCX_SHAPE_TYPE_BOX,
4096,
&exception);
3.可視判定の実施
IMICRO3D_mcx_ViewVolume_isViewable()を使用して、可視判定を行います。
/* (例)BVFigureの可視判定 */
/*----- BVFigure -----*/
if(HI_TRUE == IMICRO3D_mcx_ViewVolume_isViewablex( pMe -> pIM3D,
{
else
{
/*----- BVFigure -----*/
if(HI_TRUE == IMICRO3D_mcx_ViewVolume_isViewablex( pMe -> pIM3D,
pMe -> mcx_data.pviewvolume,
pMe -> mcx_data.pbv,
&e ) )
pMe -> mcx_data.pbv,
&e ) )
~略~
}else
{
~略~
}
可視判定 実行画面


