首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

关于游戏中模型拾取的有关问题

2013-11-29 
关于游戏中模型拾取的问题之前做普通的静态.x文件加载模型 会有一个mesh 然后就通过d3d的以下接口来判断是

关于游戏中模型拾取的问题
之前做普通的静态.x文件加载模型 会有一个mesh 然后就通过d3d的以下接口来判断是否选中了这个模型
BOOL CBaseObj::Pick(int x,int y)
{
        if(!m_pMesh)
        {
                return FALSE;
        }
        D3DVIEWPORT9 viewport;
        g_pd3dDevice->GetViewport(&viewport);

        D3DXMATRIX   matWorld, matView, pmatProj, m;
        D3DXVECTOR3  vPickRayOrig, vPickRayDir;

        matWorld = m_MatrixWorld;
        //g_pd3dDevice->GetTransform( D3DTS_WORLD, &matWorld );
        g_pd3dDevice->GetTransform( D3DTS_VIEW, &matView );
        g_pd3dDevice->GetTransform( D3DTS_PROJECTION, &pmatProj );

        //计算世界观察矩阵的逆矩阵
        D3DXMATRIX mWorldView = matWorld * matView;
        D3DXMatrixInverse( &m, NULL, &mWorldView );

        //计算拾取射线的方向与原点
        D3DXVECTOR3 vTemp;
        vTemp.x =  ((( 2.0f * x ) / viewport.Width  ) - 1 ) / pmatProj._11;
        vTemp.y = -((( 2.0f * y ) / viewport.Height ) - 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;

        BOOL               bHit;
        LPD3DXBUFFER       pBuffer = NULL;

        DWORD g_dwNumIntersections = 0;

        D3DXIntersect(m_pMesh, &vPickRayOrig, &vPickRayDir, &bHit, 
                NULL, NULL, NULL, NULL, 
                &pBuffer, &g_dwNumIntersections);

        if(g_dwNumIntersections>0)
        {
                return TRUE;
        }

        return FALSE;
}

但是现在在加载骨骼动画的.x模型时用这个拾取的时候拾取不准确,模型的部分位置可以拾取,部分又不可以拾取。请各位高手帮忙指点下。谢谢。

[解决办法]
不明觉个历。

热点排行