游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1899|回复: 3

请高手帮我看看 三维模型拾取怎么不正确

[复制链接]

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2009-11-15 12:38:00 | 显示全部楼层 |阅读模式
我仿照了微软提供的“pick”一例中写了以下代码:

        // 主消息循环:
        while (msg.message!=WM_QUIT)
        {
                if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
                else
                {
                        RECT rc;

                        D3DXMATRIX World;   
                        D3DXMATRIX matView;   
                        D3DXMATRIX matProj;
                        D3DVIEWPORT9 ViewPort;

                        Direct3DObject.m_pIDirect3DDevice->GetViewport(&ViewPort);
                        Direct3DObject.m_pIDirect3DDevice->GetTransform(D3DTS_WORLD,&World);   
                        Direct3DObject.m_pIDirect3DDevice->GetTransform(D3DTS_VIEW,&matView);   
                        Direct3DObject.m_pIDirect3DDevice->GetTransform(D3DTS_PROJECTION,&matProj);  

                        D3DXVECTOR3 vecRay, vecDir, v;
                        D3DXMATRIX m;

                        D3DXMatrixInverse(&m, NULL, &matView);

                        GetCursorPos(&Mouse);
                        ScreenToClient(hWnd,&Mouse);

                        v.x = (((2.0f * Mouse.x) / ViewPort.Width) - 1) / matProj._11;
                        v.y = -(((2.0f * Mouse.y) / ViewPort.Height) - 1) / matProj._22;
                        v.z = 1.0f;

                        vecRay.x = m._41;
                        vecRay.y = m._42;
                        vecRay.z = m._43;
                        vecDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
                        vecDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
                        vecDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;


                        BOOL Hit=false;
                        DWORD Face;
                        float u, w, Dist;

                        D3DXIntersect(m_data->BasicXFile.m_pD3DXMesh, &vecRay, &vecDir, &Hit, &Face, &u, &w, &Dist, NULL, NULL);

                        if(Hit)
                                swprintf(str,L"屏幕坐标(%d,%d)  三维坐标(%.2f,%.2f,%.2f)   已经拾取",Mouse.x,Mouse.y,vecDir.x,vecDir.y,vecDir.z);
                        else
                                swprintf(str,L"屏幕坐标(%d,%d)  三维坐标(%.2f,%.2f,%.2f)   没有拾取",Mouse.x,Mouse.y,vecDir.x,vecDir.y,vecDir.z);


                        Direct3DObject.BeginRender();
                        for(DWORD i=0;i<m_data->BasicXFile.m_dwMaterials;i++)
                        {
                                Direct3DObject.m_pIDirect3DDevice->SetMaterial(m_data->BasicXFile.m_pD3DMaterialArray+i);
                                if(m_data->BasicXFile.m_ppDirect3DTextureArray!=NULL)
                                        Direct3DObject.m_pIDirect3DDevice->SetTexture(0,m_data->BasicXFile.m_ppDirect3DTextureArray);
                                m_data->BasicXFile.m_pD3DXMesh->DrawSubset(i);
                        }
                       
                        rc.left=0;
                        rc.top=0;
                        rc.bottom=30;
                        rc.right=800;
                        Direct3DObject.pFont->DrawTextW(NULL,str,-1,&rc,DT_LEFT,D3DCOLOR_RGBA(255,255,255,255));
                        Direct3DObject.EndRender();
                }
        }



//******************************************************************************************************

但是使用鼠标拾取模型时总是无法正确拾取。拾取的结果就好像模型所在位置向右下方移动了一段距离。

请高手帮我看看,谢谢。

42

主题

140

帖子

158

积分

注册会员

Rank: 2

积分
158
发表于 2009-11-15 18:19:00 | 显示全部楼层

Re:请高手帮我看看 三维模型拾取怎么不正确

窗口大小,注意了,实际客户区的大小是否和给定的大小一样,因为CreateWindows(800,600)    实际的                客户区大小     因为       标题栏       的原因     是小于(800,600)的

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
 楼主| 发表于 2009-11-15 19:12:00 | 显示全部楼层

Re:请高手帮我看看 三维模型拾取怎么不正确

谢谢!  已经解决了

2

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2009-12-31 09:04:00 | 显示全部楼层

Re:请高手帮我看看 三维模型拾取怎么不正确

visualvisual:能说说怎么解决的吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-16 04:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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