|
|

楼主 |
发表于 2011-9-26 17:23:00
|
显示全部楼层
????? ?????????????????????
???????? pickmap ?????,??????????????????????r,???????x????,?????
IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;
????N?]???????@?????
?
bool ZCamera::pickmap(LPD3DXMESH pMesh,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2,D3DXMATRIX matWorld,BOOL b_moxing)
{
D3DXVECTOR3 vPickRayDir;
D3DXVECTOR3 vPickRayOrig;
BOOL pHit=NULL;
DWORD *pFaceIndex=NULL;
FLOAT *pU=NULL;
FLOAT *pV=NULL;
FLOAT *pDist=NULL;
LPD3DXBUFFER *ppAllHits=NULL;
DWORD *pCountOfHits=NULL;
D3DXMATRIX matProj;
FLOAT fBary1, fBary2, fDist;
g_pMyd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );
POINT ptCursor;
GetCursorPos( &ptCursor );
ScreenToClient( hwnd, &ptCursor );
D3DXVECTOR3 v;
v.x = ( ( ( 2.0f * ptCursor.x ) / 1440) - 1 ) / matProj._11;
v.y = -( ( ( 2.0f * ptCursor.y ) /900) - 1 ) / matProj._22;
v.z = 1.0f;
RECT wndRect;
GetClientRect( hwnd, &wndRect );
v.x = ( ( ( 2.0f * ptCursor.x ) / wndRect.right) - 1 ) / matProj._11;
v.y = -( ( ( 2.0f * ptCursor.y ) /wndRect.bottom) - 1 ) / matProj._22;
v.z = 1.0f;
static bool b = false;
//if(!b)
{
////FILE *fp = fopen("C:\\1.txt","at+");
//fprintf(fp,"x:%d y:%d,x:%d y:%d\n",ptCursor.x,ptCursor.y,wndRect.right,wndRect.bottom );
//fclose(fp);
//b = true;
}
D3DXMATRIX matView, m;
g_pMyd3dDevice->GetTransform( D3DTS_VIEW, &matView );
matView=matWorld*matView;
D3DXMatrixInverse( &m, NULL, &matView);
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
/*
HRESULT D3DXIntersect(
LPD3DXBASEMESH pMesh,
CONST D3DXVECTOR3 *pRayPos,
CONST D3DXVECTOR3 *pRayDir,
BOOL *pHit,
DWORD *pFaceIndex,
FLOAT *pU,
FLOAT *pV,
FLOAT *pDist,
LPD3DXBUFFER *ppAllHits,
DWORD *pCountOfHits
);
l pMesh????ID3DXBaseMesh????????????.x????????????????????????????????direct9 SDK
l pRayPos ???????
l pRayDir ????????????????????
l pHit ??????????????true,???????????
l pU ????????U??
l pV??????V??
l pDist ??????????????
????????????????????????*pDist???
l ppAllHits??????????????????????
l pCountOfHits ????????????????
*/
if (b_moxing)
D3DXIntersect(pMesh,&vPickRayOrig,&vPickRayDir,&pHit,pFaceIndex,pU,pV,pDist,ppAllHits,pCountOfHits);
else
pHit=IntersectTriangle(vPickRayOrig,vPickRayDir,v0,v1,v2,&fDist,&fBary1,&fBary2);
if( pHit==true)
{
D3DXVECTOR3 point,t;
// ??? IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;
point = v0 + fBary1*(v1-v0) + fBary2*(v2-v0); << ?????????
int a;
if( point == v0 ) // ????? v0 ?t???
{
a = 1;
}else if( point == v1 ) // ????? v1 ?t???
{
a = 2;
}else if( point ==v2)// ????? v2 ?t???
{
a = 3;
}
}
return pHit;
} |
|