| 
 这是我写的DEMO里拾取的一段!最后那个是用 D3DXIntersect来拾取多边形的面!!所以指向第一个参数为网格模型,这里我创建了包围盒就指向包围盒了! 
////////////////////////////////////////////////////////////////////////// //拾取网格 ////////////////////////////////////////////////////////////////////////// BOOL GameUI: ick(NPC *pNPC){  BOOL isPick=false; 
 float Dist;  D3DXMATRIXA16 ProjMatrix; //投影  D3DXMATRIXA16 ViewMatrix; //观察  D3DXMATRIXA16 im; //观察矩阵取逆  D3DXVECTOR3  v;  //发射点  D3DXVECTOR3  vPickRayDir; //Mouse点击射线的空间方向 
 m_pd3dDevice->GetTransform(D3DTS_PROJECTION,& rojMatrix); //投影矩阵  v.x = (((2.0f * p.x) / ScreenW) - 1) / ProjMatrix._11;  //基本投影的射线     v.y =-(((2.0f * p.y) / ScreenH) - 1) / ProjMatrix._22;     v.z =  1.0f;  m_pd3dDevice->GetTransform( D3DTS_VIEW, &ViewMatrix ); //视图矩阵  D3DXMatrixInverse(&im,NULL,&ViewMatrix); //求逆     vPickRayDir.x  = v.x*im._11 + v.y*im._21 + v.z*im._31; //基于视图的射线     vPickRayDir.y  = v.x*im._12 + v.y*im._22 + v.z*im._32;     vPickRayDir.z  = v.x*im._13 + v.y*im._23 + v.z*im._33; 
 D3DXVec3Normalize(&vPickRayDir,&vPickRayDir);  D3DXVECTOR3 vPickRayOrig;  vPickRayOrig.x = im._41;     vPickRayOrig.y = im._42;     vPickRayOrig.z = im._43; 
 vPickRayOrig += vPickRayDir;    //变换到物体坐标内和物体求交  D3DXMATRIX matInv;  D3DXVECTOR3 vPickRayDir_tmp, vPickRayOrig_tmp;     D3DXMatrixInverse(&matInv, NULL, &pNPC->matBoxWorld);     D3DXVec3TransformCoord(&vPickRayOrig_tmp, &vPickRayOrig, &matInv);     D3DXVec3TransformNormal(&vPickRayDir_tmp, &vPickRayDir, &matInv);  //根据NPC的包围盒来拾取物体  D3DXIntersect(pNPC->ptagetMesh, //改变为自己生成出的BOX      &vPickRayOrig_tmp,&vPickRayDir_tmp,&isPick,      NULL,NULL,NULL,&Dist,NULL,NULL);  return isPick; } 
//////////////////////////////////////////////////////////////////////////  |