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,
/*----- 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 );
&pMe -> mcx_data.start,
&pMe -> mcx_data.dir,
&e );
2.Ray と Figure の交差判定
交差判定は、IMICRO3D_mcx_Collision_isHitShapeToShape()で行います。
mcxCollisionx *p_collision;
mcxCollisionIsHitDatax hitData;
hi_bool isHit; = HI_FALSE;
/*----- Collisionインスタンスの作成 -----*/
pMe -> mcx_data.pcollision = IMICRO3D_mcx_Collision_createx( pMe -> pIM3D, pMe -> pAlc, &e );
/*----- 当たり判定 -----*/
isHit = IMICRO3D_mcx_Collision_isHitShapeToShapex( pMe -> mpMicro3D,
mcxCollisionIsHitDatax hitData;
hi_bool isHit; = HI_FALSE;
/*----- Collisionインスタンスの作成 -----*/
pMe -> mcx_data.pcollision = IMICRO3D_mcx_Collision_createx( pMe -> pIM3D, pMe -> pAlc, &e );
ialloc,
&exception );
&exception );
/*----- 当たり判定 -----*/
isHit = IMICRO3D_mcx_Collision_isHitShapeToShapex( pMe -> mpMicro3D,
pMe -> mcx_data.pcollision,
(mcxShapex*)pMe -> mcx_data.pRay,
(mcxShapex*)pMe -> mcx_data.pbv,
&hitData,
&e );
(mcxShapex*)pMe -> mcx_data.pRay,
(mcxShapex*)pMe -> mcx_data.pbv,
&hitData,
&e );

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

