|
|
发表于 2005-8-1 21:17:00
|
显示全部楼层
Re: 新人:一个关于鼠标点击屏幕上区域的问题
GRAPHICS_API bool GE_ArePointsSameSideOfLine( const D3DXVECTOR3* pvP1, const D3DXVECTOR3* pvP2, const D3DXVECTOR3* pvA, const D3DXVECTOR3* pvB )
{
D3DXVECTOR3 v1 = *pvB - *pvA;
D3DXVECTOR3 v2 = *pvP1 - *pvA;
D3DXVECTOR3 v3 = *pvP2 - *pvA;
D3DXVECTOR3 v4;
D3DXVECTOR3 v5;
D3DXVec3Cross(&v4,&v1,&v2);
D3DXVec3Cross(&v5,&v1,&v3);
if( D3DXVec3Dot( &v4, &v5 ) >= 0.0f )
return true;
return false;
}
GRAPHICS_API bool GE_IsPointInTriangle( const D3DXVECTOR3* pvPt, const D3DXVECTOR3* pA, const D3DXVECTOR3* pB, const D3DXVECTOR3* pC )
{
if( GE_ArePointsSameSideOfLine( pvPt, pA, pB, pC ) &&
GE_ArePointsSameSideOfLine( pvPt, pB, pA, pC ) &&
GE_ArePointsSameSideOfLine( pvPt, pC, pA, pB ) )
return true;
return false;
}
GRAPHICS_API bool GE_IsPointInQuad( const D3DXVECTOR3& vPt, const D3DXVECTOR3* pvQuad )
{
if( GE_IsPointInTriangle( &vPt, &pvQuad[0], &pvQuad[1], &pvQuad[2] ) ||
GE_IsPointInTriangle( &vPt, &pvQuad[1], &pvQuad[2], &pvQuad[3] ) )
return true;
return false;
}
|
|