GEMINIGHT 警告:您的浏览器不支持JavaScript将无法正常浏览!
Warning: Your browser does not support JavaScript!
📋注册(Register) | 📛登录(Login)
🎲

主站(Home) »  论坛(Forum)  » 程序编写(Program)
chengen
注册于:2005年7月28日
等级:高级会员
帖子数:97
积分:1124
阅读权限:40
鼠标的拾取(大版主快进) 1楼
小弟学到鼠标的拾取了,做了一个小东东,可它的拾取结果总是不正确的!搞了四五天了还搞它不定!下面是程序中的拾取片断,大版主帮我看看哪出了问题?

\N

D3DXMATRIX m_ManTranslate;
char buffer[256];
HRESULT hr;
DIMOUSESTATE2 dims2; // DirectInput mouse state structure
POINT *pt=NULL; //用于获取鼠标位置
D3DXMATRIX m_ProjMatrix; //投影矩阵
D3DXMATRIX m_ViewMatrix; //观察矩阵
pt=new POINT;

\N

g_pd3dDevice->GetTransform (D3DTS_PROJECTION,&m_ProjMatrix); //获取投影矩阵;

\N

GetCursorPos(pt);
ScreenToClient(hWnd,pt); //把相对于全屏幕的鼠标坐标转换成相对于本视窗的坐标

\N

D3DXVECTOR3 m_viewPt;
D3DXVECTOR3 m_world;
D3DXVECTOR3 m_OriginWorld;

\N

m_viewPt.x=(2 * pt->x/m_d3dsdBackBuffer.Width -1)/m_ProjMatrix._11;
m_viewPt.y= -(2 * pt->y/m_d3dsdBackBuffer.Height -1)/m_ProjMatrix._22;

\N

m_viewPt.z=1;
g_pd3dDevice->GetTransform(D3DTS_VIEW,&m_ViewMatrix);
D3DXMatrixInverse(&m_ViewMatrix,NULL,&m_ViewMatrix);

m_world.x=m_viewPt.x * m_ViewMatrix._11 + m_viewPt.y * m_ViewMatrix._21 + m_viewPt.z * m_ViewMatrix._31;
m_world.y=m_viewPt.y * m_ViewMatrix._12 + m_viewPt.y * m_ViewMatrix._22 + m_viewPt.z * m_ViewMatrix._32;
m_world.z=m_viewPt.z * m_ViewMatrix._13 + m_viewPt.y * m_ViewMatrix._23 + m_viewPt.z * m_ViewMatrix._33;
// m_world.z=1.0f;

m_OriginWorld.x=m_ViewMatrix._41;
m_OriginWorld.y=m_ViewMatrix._42;
m_OriginWorld.z=m_ViewMatrix._43;

\N

BOOL *pHit=NULL;
float *pU=NULL,*pV=NULL,*pDist=NULL;
LPD3DXBUFFER *ppAllHits=NULL;
DWORD *pCountofHits=0,*pFaceIndex=0;
pHit=new BOOL;
pU=new float;
pV=new float;
pDist=new float;
ppAllHits=new LPD3DXBUFFER;

\N

hr=D3DXIntersect(g_pTheMap->m_pMesh ,&m_OriginWorld,&m_world,pHit,pFaceIndex,pU,pV,pDist,ppAllHits,pCountofHits);

\N[align=right][color=#000066][此贴子已经被作者于2005-8-8 11:53:17编辑过][/color][/align]
SIGNATURE
Using codes to create beauty, that is my pride.
🗓2005-8-7 10:30(约19年前)  👁1497
Jeminai

自称:雙子騎士
注册于:2005年5月26日
等级:站长
帖子数:6428
积分:41808
阅读权限:200
2楼

晕啊,老调重弹。

\N

DXSDK里不是有一个Pick的例题吗,你可以看看啊。

\N

另外,GameRes上也早就有人发过贴了,你可以到程序区仔细找找。

SIGNATURE
我的Blog网址:blog.geminight.com
🗓2005-8-8 08:03(约19年前)
chengen
注册于:2005年7月28日
等级:高级会员
帖子数:97
积分:1124
阅读权限:40
3楼

我就是参考pick来做的,Gameres上的历来贴子我也看过了,但还是无法解决。我觉得我的程序中拾取部分应该没错,问题是场景与射线出发点。

\N

现在无论我把场景变大变小左移右移,结果总是:鼠标在视窗右下角点击刚检测出射线与场景相交(即使视窗右下角没有场景);鼠标在其它地方点击,检测结果总是不相交(即使场景就在那里)。

\N

好像场景的改变不会影响拾取结果,这令我非常头痛!

\N

还望大版主指教!

SIGNATURE
Using codes to create beauty, that is my pride.
🗓2005-8-8 11:45(约19年前)
Jeminai

自称:雙子騎士
注册于:2005年5月26日
等级:站长
帖子数:6428
积分:41808
阅读权限:200
4楼

我也是参考pick的、、、?应该没问题啊!?

\N

解决问题一步步来,你先检查一下你的射线的起点和向量是否正确、、、

\N

至于D3DXIntersect嘛,由于我的内核与你们的不同(我不使用XMesh的),对于XMesh了解很少不能确认你这个函数使用是否正确。

SIGNATURE
我的Blog网址:blog.geminight.com
🗓2005-8-8 15:33(约19年前)
chengen
注册于:2005年7月28日
等级:高级会员
帖子数:97
积分:1124
阅读权限:40
5楼

搞定了!

SIGNATURE
Using codes to create beauty, that is my pride.
🗓2005-8-9 11:35(约19年前)
Jeminai

自称:雙子騎士
注册于:2005年5月26日
等级:站长
帖子数:6428
积分:41808
阅读权限:200
6楼

很好!就应该这样。

\N

象这种问题就应该自己来搞定,这可以为你将来开发累积下宝贵的经验。[em39]

\N

我每天也在搞研发,经常遇到各种难题让我头疼的发酸,而且连问的对象都没有。[em37]

SIGNATURE
我的Blog网址:blog.geminight.com
🗓2005-8-9 15:37(约19年前)
21330119
注册于:2006年8月4日
等级:新手上路
帖子数:3
积分:16
阅读权限:10
7楼

是哪出了问题呀?我现在也在学习鼠标拾取,LZ后面的注释能加点吗。。有点不懂

🗓2006-8-4 20:00(约18年前)
chengen
注册于:2005年7月28日
等级:高级会员
帖子数:97
积分:1124
阅读权限:40
8楼

呃,楼上的,不好意思啊,很久没搞PC 3D游戏了,现在搞的是Java ME游戏开发,也就是手机游戏开发了,这问题当初是怎么解决的自己都忘了,

\N

不过,解决方法我好像发在了另外一相贴子里,就是那个鼠标拾取总结那个贴子。

SIGNATURE
Using codes to create beauty, that is my pride.
🗓2006-9-18 23:03(约18年前)

标题(Title):
关键字标签(Tags):
路人:回贴可以不必登录