D3DXIntersectSubset 函数
将指定的光线与给定的网格子集相交。 这提供了与 D3DXIntersect 类似的功能。
语法
HRESULT D3DXIntersectSubset(
_In_ LPD3DXBASEMESH pMesh,
_In_ DWORD AttribId,
_In_ const D3DXVECTOR3 *pRayPos,
_In_ const D3DXVECTOR3 *pRayDir,
_Out_ BOOL *pHit,
_Out_ DWORD *pFaceIndex,
_Out_ FLOAT *pU,
_Out_ FLOAT *pV,
_Out_ FLOAT *pDist,
_Out_ LPD3DXBUFFER *ppAllHits,
_Out_ DWORD *pCountOfHits
);
parameters
-
pMesh [in]
-
类型: LPD3DXBASEMESH
指向 ID3DXBaseMesh 接口的指针,表示要测试的网格。 网格必须经过属性排序。
-
AttribId [in]
-
类型: DWORD
要与之相交的子集的属性标识符。
-
pRayPos [in]
-
类型: const D3DXVECTOR3*
指向 D3DXVECTOR3 结构的指针,指定光线开始的点。
-
pRayDir [in]
-
类型: const D3DXVECTOR3*
指向 D3DXVECTOR3 结构的指针,指定光线的方向。
-
pHit [out]
-
类型: BOOL*
指向 BOOL 的指针。 如果光线与网格上的三角形面相交,此值将设置为 TRUE。 否则,此值设置为 FALSE。
-
pFaceIndex [out]
-
类型: DWORD*
如果 pHit 为 TRUE,则指向最接近光线原点的人脸的索引值的指针。
-
pU [out]
-
类型: FLOAT*
指向重中心命中坐标的指针,U.
-
pV [out]
-
类型: FLOAT*
指向重中心命中坐标 V 的指针。
-
pDist [out]
-
类型: FLOAT*
指向光线交集参数距离的指针。
-
ppAllHits [out]
-
类型: LPD3DXBUFFER*
D3DXINTERSECTINFO 结构的数组,表示所有命中,而不仅仅是最近的命中。
-
pCountOfHits [out]
-
类型: DWORD*
从 ppAllHits 返回的数组中的元素数。
返回值
类型: HRESULT
如果函数成功,则返回值D3D_OK。 如果函数失败,则返回值可以是以下值:E_OUTOFMEMORY。
备注
D3DXIntersectSubset 函数提供了一种了解三角形中和周围点的方法,与三角形的实际位置无关。 此函数使用以下公式返回结果点:V1 + U (V2 - V1) + V (V3 - V1) 。
平面 V1V2V3 中的任何点都可以由大中心坐标 (U,V) 表示。 参数 U 控制 V2 在结果中加权的量,参数 V 控制 V3 在结果中加权的量。 最后,值 [1 - (U + V) ] 控制 V1 在结果中的权重。
大中心坐标是一般坐标的一种形式。 在此上下文中,使用大中心坐标表示坐标系的变化。 对于笛卡尔坐标为 true,对于偏心坐标则为 true。
大中心坐标根据三角形的顶点定义三角形内的点。 有关 Barycentric 坐标的更深入说明,请参阅 Mathworld 的 Bary 心坐标说明。
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅