|
|
/////////////////////////////////////////////
int g_nScreenWidth --屏幕的宽
int g_nScreenHeight --屏幕的高
LONG X,LONG Y --- 鼠标的X , Y值
/////////////////////////////////////////////
为什么鼠标点击地形没有反应呢????????????????
void CTerrain1::GetIntersectPos(int g_nScreenWidth,int g_nScreenHeight,LONG X,LONG Y)
{
BOOL m_isHit = false;
//计算拾取射线相关变量声明
D3DXMATRIX matWorld, matView, pmatProj, m;
D3DXVECTOR3 vPickRayOrig, vPickRayDir;
//获取当前设备的变换矩阵
m_pd3dDevice->GetTransform( D3DTS_WORLD, &matWorld );
m_pd3dDevice->GetTransform( D3DTS_VIEW, &matView );
m_pd3dDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );
//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMatrixInverse( &m, NULL, &mWorldView );
//计算拾取射线的方向与原点
D3DXVECTOR3 vTemp;
vTemp.x = ((( 2.0f * X ) / g_nScreenWidth ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * Y ) / g_nScreenHeight ) - 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;
DWORD IndexFace = 0;
float pU = 0.0f;
float pV = 0.0f;
D3DXIntersect( m_pMesh, &vPickRayOrig, &vPickRayDir,&m_isHit,
&IndexFace, &pU, &pV, NULL,
NULL, NULL );
if (IndexFace > 0)
{
MessageBox(0,0,0,0);
}
}
在WIN32下面写,就没有事情,放到MFC框架里就不行了。。也不报错,就不进判断里面 |
|