次の方法で共有


D3DXIntersectSubset

指定した光線が特定のメッシュ サブセットに当たります。D3DXIntersect に類似した機能が提供されます。

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

パラメータ

  • pMesh
    ID3DXBaseMesh インターフェイスへのポインターです。テストするメッシュを示します。メッシュは属性ソートする必要があります。
  • AttribId
    光が当たるサブセットの属性識別子です。
  • pRayPos
    光線の始点を指定する D3DXVECTOR3 構造体へのポインターです。
  • pRayDir
    光線の方向を指定する D3DXVECTOR3 構造体へのポインターです。
  • pHit
    BOOL へのポインターです。光線がメッシュの三角形の面に当たるとき、この値は TRUE に設定されます。当たらないときは FALSE になります。
  • pFaceIndex
    面のインデックス値へのポインターです。pHit が TRUE の場合に、光線の始点に最も近い面のインデックス値を指します。
  • pU
    重心ヒット座標 U へのポインターです。
  • pV
    重心ヒット座標 V へのポインターです。
  • pDist
    光線の始点から交点までの距離へのポインターです。
  • ppAllHits
    最も近いヒットだけでなく、すべてのヒットを表す D3DXINTERSECTINFO 構造体の配列です。
  • pCountOfHits
    ppAllHits から返される配列内の要素の数です。

戻り値

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

解説 

D3DXIntersectSubset 関数は、三角形の実際の場所に関係なく、三角形の内部と周囲のポイントを把握するのに役立ちます。この関数では次の式を使用し、結果のポイントを返します。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 内容