Japanese | English | Korean

Samples

視錐台による可視判定

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 );

可視判定を行うためには、3D描画のためのカメラと同じようにNear Clip、Far Clip、画角の設定を行う必要があります。IMICRO3D_mcx_setPerspectiveViewFromAngle()で視野角から視錐台の設定を行います。
また、視錐台を設定した後、カメラ座標への変換行列を設定する必要があります。カメラ座標への変換行列の設定は、IMICRO3D_mcx_ViewVolume_setTransformx()を使用します。

/*----- 視錐台による判定 -----*/
/*----- ViewVolumeの設定 -----*/
IMICRO3D_mcx_ViewVolume_setPerspectiveViewFromAnglex( pMe -> pIM3D,
        pMe -> mcx_data.pviewvolume,
        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);


2.BVFigure 全体に対するバウンディングボリュームの設定

BVFigure に対する可視判定にはあらかじめ BVFigure クラス全体に対するバウンディングボリュームを設定する必要があります。

mcxBVFigurex               *p_bvfig;
mcxBoundingVolumex     *pbv;

/*----- Shapeインスタンスの作成 -----*/
/*----- BVFigure -----*/
pMe -> mcx_data.pbvfig = IMICRO3D_mcx_BVBuilder_createBVFigureOnlyBonex( pMe -> mcx_data.pbvfig
        pMe -> pAlc,
        &pMe -> mc_data.figure,
        &e );

/*----- 3Dデータを内包するバウンディングボリュームの作成 -----*/
IMICRO3D_mcx_BVFigure_calculateBVx( pMe -> mpMicro3D,
         pMe -> p_bvfig,
         MCX_SHAPE_TYPE_BOX,
         4096,
         &exception);


3.可視判定の実施

IMICRO3D_mcx_ViewVolume_isViewable()を使用して、可視判定を行います。

/* (例)BVFigureの可視判定 */
/*----- BVFigure -----*/
if(HI_TRUE == IMICRO3D_mcx_ViewVolume_isViewablex( pMe -> pIM3D,
pMe -> mcx_data.pviewvolume,
pMe -> mcx_data.pbv,
&e ) )
{
~略~
}
else
{
~略~
}


可視判定 実行画面