游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1243|回复: 4

鼠标的拾取(请教!)

[复制链接]

6

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
QQ
发表于 2005-8-7 10:35:00 | 显示全部楼层 |阅读模式
小弟正在学习鼠标的拾取,做了一个小东东,可它的拾取结果总是不正确的!搞了四五天了还搞它不定!下面是程序中的拾取片断,各位大哥帮我看看哪出了问题?

        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;

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

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

                        D3DXVECTOR3        m_viewPt;       
                        D3DXVECTOR3        m_world;
                        D3DXVECTOR3 m_OriginWorld;

                        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;

                        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;

                        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;

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

8

主题

182

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
发表于 2005-8-7 11:18:00 | 显示全部楼层

Re: 鼠标的拾取(请教!)

如果你创建 设备时 顶点的处理方式 是 D3DCREATE_PUREDEVICE,
调用GetTransform 返回的结果是无效的。

6

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
QQ
 楼主| 发表于 2005-8-7 16:08:00 | 显示全部楼层

Re:鼠标的拾取(请教!)

这样子啊;但我在程序中用的是3DCREATE_SOFTWARE_VERTEXPROCESSING哦,
整个函数是:g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice )

请楼上的大哥继续指教!

6

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
QQ
 楼主| 发表于 2005-8-7 16:11:00 | 显示全部楼层

Re:鼠标的拾取(请教!)

哪位大哥会的快教教小弟啊

6

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
QQ
 楼主| 发表于 2005-8-7 19:09:00 | 显示全部楼层

Re:鼠标的拾取(请教!)

自己顶一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 18:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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