游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1398|回复: 0

MFC+DX鼠标检测问题

[复制链接]

31

主题

60

帖子

60

积分

注册会员

Rank: 2

积分
60
发表于 2010-2-2 15:23:00 | 显示全部楼层 |阅读模式
/////////////////////////////////////////////
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框架里就不行了。。也不报错,就不进判断里面
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-14 15:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表