次の方法で共有


D3DXIntersect

光線がメッシュに当たるかどうかを判定します。

HRESULT 
D3DXIntersect(
  LPD3DXBASEMESH pMesh,
  CONST D3DXVECTOR3 * pRayPos,
  CONST D3DXVECTOR3 * pRayDir,
  BOOL * pHit,
  DWORD * pFaceIndex,
  FLOAT * pU,
  FLOAT * pV,
  FLOAT * pDist,
  LPD3DXBUFFER * ppAllHits,
  DWORD * pCountOfHits
);

パラメータ

  • pMesh
    ID3DXBaseMesh インターフェイスへのポインターです。テストするメッシュを示します。
  • pRayPos
    光線の始点を指定する D3DXVECTOR3 構造体へのポインターです。
  • pRayDir
    光線の方向を指定する D3DXVECTOR3 構造体へのポインターです。
  • pHit
    BOOL へのポインターです。光線がメッシュの三角形の面に当たるとき、この値は TRUE に設定されます。当たらないときは FALSE になります。
  • pFaceIndex
    面のインデックス値へのポインターです。pHit が TRUE の場合に、光線の始点に最も近い面のインデックス値を指します。
  • pU
    重心ヒット座標 U へのポインターです。
  • pV
    重心ヒット座標 V へのポインターです。
  • pDist
    光線の始点から交点までの距離へのポインターです。
  • ppAllHits
    ID3DXBuffer オブジェクトへのポインターです。D3DXINTERSECTINFO 構造体の配列が含まれます。
  • pCountOfHits
    ppAllHits 配列内のエントリの数を含む DWORD へのポインターです。

戻り値

成功すると、D3D_OK を返します。失敗した場合は、次の値を返します。E_OUTOFMEMORY

解説 

D3DXIntersect 関数は、三角形の実際の場所に関係なく、三角形の内部と周囲のポイントを把握するのに役立ちます。この関数では次の式を使用し、結果のポイントを返します。V1 + U(V2-V1) + V(V3-V1)。

プレーン V1V2V3 内の任意のポイントを重心座標 (U,V) で表すことができます。パラメーター U は結果に対する V2 の加重を示し、パラメーター V は結果に対する V3 の加重を示します。また、[1 - (U + V)] の値は結果に対する V1 の加重を示します。

重心座標は、一般的な座標形式です。したがって、重心座標を使用することは座標系を変更することを意味します。デカルト座標で成り立つ事象は、重心座標でも成り立ちます。

重心座標は、三角形の頂点に関して、三角形の内側のポイントを定義します。重心座標の詳細については、Mathworld の「Barycentric Coordinates (重心座標)」の説明を参照してください。

要件

ヘッダー: D3DX9Mesh.h 宣言

ライブラリ: D3dx9.lib 内容