关于游戏中模型拾取的问题
之前做普通的静态.x文件加载模型 会有一个mesh 然后就通过d3d的以下接口来判断是否选中了这个模型
BOOL CBaseObj::Pick(int x,int y)
{
if(!m_pMesh)
{
return FALSE;
}
D3DVIEWPORT9 viewport;
g_pd3dDevice->GetViewport(&viewport);
D3DXMATRIX matWorld, matView, pmatProj, m;
D3DXVECTOR3 vPickRayOrig, vPickRayDir;
matWorld = m_MatrixWorld;
//g_pd3dDevice->GetTransform( D3DTS_WORLD, &matWorld );
g_pd3dDevice->GetTransform( D3DTS_VIEW, &matView );
g_pd3dDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );
//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMatrixInverse( &m, NULL, &mWorldView );
//计算拾取射线的方向与原点
D3DXVECTOR3 vTemp;
vTemp.x = ((( 2.0f * x ) / viewport.Width ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * y ) / viewport.Height ) - 1 ) / pmatProj._22;
vTemp.z = 1.0f;
vPickRayDir.x = vTemp.x*m._11 + vTemp.y*m._21 + vTemp.z*m._31;
vPickRayDir.y = vTemp.x*m._12 + vTemp.y*m._22 + vTemp.z*m._32;
vPickRayDir.z = vTemp.x*m._13 + vTemp.y*m._23 + vTemp.z*m._33;
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43;
BOOL bHit;
LPD3DXBUFFER pBuffer = NULL;
DWORD g_dwNumIntersections = 0;
D3DXIntersect(m_pMesh, &vPickRayOrig, &vPickRayDir, &bHit,
NULL, NULL, NULL, NULL,
&pBuffer, &g_dwNumIntersections);
if(g_dwNumIntersections>0)
{
return TRUE;
}
return FALSE;
}
但是现在在加载骨骼动画的.x模型时用这个拾取的时候拾取不准确,模型的部分位置可以拾取,部分又不可以拾取。请各位高手帮忙指点下。谢谢。
[解决办法]
不明觉个历。