D3DXVECTOR3 vStartPoint( 0, 0, 0);//Rayのスタートポイント D3DXVECTOR3 vEndPoint( 0, -1, 0);//Rayを伸ばす方向 BOOL bHit;//当り判定フラグ float fDistance;//距離 D3DXVECTOR3 vRayDir;//Rayを伸ばす角度 ///////m_MtrxMe-自機用マトリクス LPD3DXMESH ppMesh-対象Mesh //* メッシュのロード、行列演算、描画、各種設定 省略 *// //--------下RayとMeshの当り判定 D3DXVec3TransformCoord( &vStartPoint, &vStartPoint, &m_MtrxMe ); D3DXVec3TransformCoord( &vEndPoint, &vEndPoint, &m_MtrxMe); D3DXVec3Subtract( &vRayDir, &vEndPoint, &vStartPoint); D3DXVec3Normalize( &vRayDir, &vRayDir ); D3DXIntersect(ppMesh, &vStartPoint, &vRayDir, &bHit, NULL, NULL, NULL, &fDistance, NULL, NULL); if( bHit ){ //-------------- 位置補正 ---------------// //省略 //-------------- fDistance表示 ---------------// //省略 }
いつも楽しく拝見させていただいております。
書き込むのは初めてで、プログラミングスキルも拙いので、
質問を巧く皆様に伝えられるかどうか不安ですが、質問させて頂きます。
ただいま上記のようにレイを使って自機とメッシュの当り判定を行っています。
当り判定もメッシュとの距離も希望通り取得する事ができています。
ですが、対象メッシュに移動行列、回転行列、拡大行列を演算すると、
当り判定がうまくいきません。
具体的には、
1.(0,0,0)
↓対象メッシュ移動
2.(10,10,10)
↓当り判定
1.との当り判定が返って来る。
以上の結果になります。
移動だけではなく、拡大、縮小、回転も同じ結果です。
移動、形が変わるものにレイ判定は使用しない方がよろしいでしょうか。
横長になったりもするのでバウンディングスフィアも適応し難いです。
凹凸があったりもしますのでバウンディングボックスも辛いです。
対象メッシュはマップみたいなものを想像していただけると良いかと思われます。
それが斜めになったり細長くなったり動いたりします。
任意で定めた仮座標
(例えば、対象メッシュの範囲内で10pixelごとからレイを飛ばす)
との当り判定だと、メッシュが大きくなったときとかも考慮すると重くなりそうで現実的ではないような・・・。
すべてのポリゴンとの判定もおなじ理由で難しそうです。
何か良い方法はありますでしょうか。
また、同じ理由で困っている人、困った事がある人はいませんか?