|
D3DXIntersectSubset Function
--------------------------------------------------------------------------------
Intersects the specified ray with the given mesh subset. This provides similar functionality to D3DXIntersect.
Syntax
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
);
Parameters
pMesh
[in] Pointer to an ID3DXBaseMesh interface, representing the mesh to be tested. The mesh must be attribute sorted.
AttribId
[in] Attribute identifier of the subset to intersect with.
pRayPos
[in] Pointer to a D3DXVECTOR3 structure, specifying the origin coordinate of the ray.
pRayDir
[in] Pointer to a D3DXVECTOR3 structure, specifying the direction of the ray.
pHit
[out] Pointer to a BOOL. If the ray intersects a triangular face on the mesh, this value will be set to TRUE. Otherwise, this value is set to FALSE.
pFaceIndex
[out] Pointer to an index value of the face closest to the ray origin, if pHit is TRUE.
pU
[out] Pointer to a barycentric hit coordinate, U.
pV
[out] Pointer to a barycentric hit coordinate, V.
pDist
[out] Pointer to a ray intersection parameter distance.
ppAllHits
[out] Array of D3DXINTERSECTINFO structures, representing all hits, not just closest hits.
pCountOfHits
[out] Number of elements in the array returned from ppAllHits.
Return Value
If the function succeeds, the return value is D3D_OK.
If the function fails, the return value can be the following value.
E_OUTOFMEMORY Microsoft Direct3D could not allocate sufficient memory to complete the call.
Remarks
The D3DXIntersectSubset function provides a way to understand points in and around a triangle, independent of where the triangle is actually located. This function returns the resulting point by using the following equation: V1 + U(V2-V1) + V(V3-V1).
Any point in the plane V1V2V3 can be represented by the barycentric coordinate (U,V). The parameter U controls how much V2 gets weighted into the result and the parameter V controls how much V3 gets weighted into the result. Lastly, 1-U-V controls how much V1 gets weighted into the result.
Barycentric coordinates are a form of general coordinates. In this context, using barycentric coordinates represents a change in coordinate systems. What holds true for Cartesian coordinates holds true for barycentric coordinates.
Function Information
Header d3dx9mesh.h
Import library d3dx9.lib
Minimum operating systems Windows 98
以上是这个函数的介绍,E文好的请翻译下
此函数将从pRayPos引一条射线,至pRayDir,如果与指定网格的某个单元有碰撞(穿过),则isHit为真,并返回1个该单元的索引保存在pFaceIndex中,返回碰撞次数在pCountOfHits中,并返碰撞时pRayPos至碰撞点的直线距离在pDist中.
我们只要利用好pDist,判断碰撞的距离,就可以实现游戏中的碰撞检测.
具我判断,该函数应该是由GPU执行的,所以效率应该很高,速度很快.
关于碰撞检测,本来小弟还有个愚蠢的办法,但由于此法更精细,小弟也就舍弃了,不在次献丑了.
上面的函数介绍都是E文的,小弟也还有些参数没弄明白,有这几个参数也已经足够,其它的全都用NULL就行了.如果有哪位大哥有时间还请指点下其他参数,最好还能翻译下哈,很多人像小弟一样E问单词认识的少啊
还有个类似功能的函数D3DXIntersect,大家可以查MSDN,基本一样,少个参数,其实用D3DXIntersectSubset()应该更好. |
|