Japanese | English | Korean

Samples

Ray との交差

Shape同士の衝突判定で、どちらかのShapeがLineやRayであれば、交差判定を行うことができます。

目次


サンプルでは、3Dデータを包括するBounding VolumeとRayとが交差したとき、色が変わるようになっています。


1.Rayの作成

Rayは、IMICRO3D_mcx_Ray_createx()を使用して作成します。

mcxRayx      *pRay;

/*----- Shapeインスタンスの作成 -----*/
/*----- Ray -----*/
pMe -> mcx_data.pRay = IMICRO3D_mcx_Ray_createx( pMe -> pIM3D,pMe -> pAlc, &e);

/*----- ベクトルの開始位置を設定 -----*/
pMe -> mcx_data.start.x = 100;
pMe -> mcx_data.start.y = 150;
pMe -> mcx_data.start.z = 800;

/*----- ベクトルの方向を設定 -----*/
pMe -> mcx_data.dir.x =   0;
pMe -> mcx_data.dir.y =   0;
pMe -> mcx_data.dir.z = -1;

/*----- Rayの情報を設定 -----*/
IMICRO3D_mcx_Ray_setx( pMe  -> pIM3D,
          pMe  -> mcx_data.pRay,
         &pMe -> mcx_data.start,
         &pMe -> mcx_data.dir,
         &e);


2.Ray と Figure の交差判定

交差判定は、IMICRO3D_mcx_Collision_isHitShapeToShape()で行います。

mcxCollisionx               *p_collision;
mcxCollisionIsHitDatax    hitData;
hi_bool                          isHitt = HI_FALSE;

/*----- Collisionインスタンスの作成 -----*/
pMe -> mcx_data.pcollision = IMICRO3D_mcx_Collision_createx( pMe -> pIM3D, pMe -> pAlc, &e );

/*----- 当たり判定 -----*/
isHit = IMICRO3D_mcx_Collision_isHitShapeToShapex( pMe -> pIM3D,
          pMe -> pIM3D,
          (mcxShapex*)pMe -> pIM3D,
          (mcxShapex*)pMe -> mcx_data.pbv,
          &hitData,
          &e );

 
交差判定 実行画面
(左画像:交差無 / 右画像:交差有)