|
[em24] [em24] [em24]
代码如下:
第一种:
D3DXMATRIX world, view, projection;
GetDevice()->GetTransform(D3DTS_WORLD,&world);
GetDevice()->GetTransform(D3DTS_VIEW,&view);
GetDevice()->GetTransform(D3DTS_PROJECTION,&projection);
: 3DXVec3Unproject(&pOut,&pIn,&viewport,&projection,&view,&world);
第二种:
D3DXMATRIX matWorld, matView, pmatProj, m;
D3DXVECTOR3 WorldPtDir;
//获取当前设备的变换矩阵
m_pGraphic->Device()->GetTransform( D3DTS_WORLD, &matWorld );
m_pGraphic->Device()->GetTransform( D3DTS_VIEW, &matView );
m_pGraphic->Device()->GetTransform( D3DTS_PROJECTION, &pmatProj );
//计算世界观察矩阵的逆矩阵
D3DXMATRIX mWorldView = matWorld * matView;
D3DXMatrixInverse( &m, NULL, &mWorldView );
//获取当前视区相关信息
D3DVIEWPORT9 viewport;
m_pApplication->GetDeviceGraphic()->Camera()->GetViewPort(viewport);
//计算拾取射线的方向与原点
D3DXVECTOR3 vTemp;
vTemp.x = ((( 2.0f * Pt.x ) / viewport.Width ) - 1 ) / pmatProj._11;
vTemp.y = -((( 2.0f * Pt.y ) / viewport.Height ) - 1 ) / pmatProj._22;
vTemp.z = 1;
WorldPtDir.x = vTemp.x*m._11 + vTemp.y*m._21 + vTemp.z*m._31;
WorldPtDir.y = vTemp.x*m._12 + vTemp.y*m._22 + vTemp.z*m._32;
WorldPtDir.z = vTemp.x*m._13 + vTemp.y*m._23 + vTemp.z*m._33;
本人菜鸟,请指教指教…… |
|