|
|

楼主 |
发表于 2006-2-10 09:11:00
|
显示全部楼层
Re:求助!关于D3D中图元的合取
终于成了~!
谢谢楼上大大多次不厌其烦的提醒!
附D3D转换部分的源码:
(最后部分和<<Direct3D中实现图元的鼠标拾取>>一文中不同,不知道是不是因为原文我没看懂)
D3DXMATRIXA16 matProj;
m_pd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );
POINT ptCursor;
GetCursorPos( &ptCursor );
ScreenToClient( m_hWnd, &ptCursor );
// Compute the vector of the pick ray in screen space
D3DXVECTOR3 v;
v.x = ( ( ( 2.0f * ptCursor.x ) / m_d3dsdBackBuffer.Width ) - 1 )
/ matProj._11;
v.y = -( ( ( 2.0f * ptCursor.y ) / m_d3dsdBackBuffer.Height ) - 1 )
/ matProj._22;
v.z = 1.0f;
// Get the inverse of the composite view and world matrix
D3DXMATRIXA16 matView, matWorld, m;
m_pd3dDevice->GetTransform( D3DTS_VIEW, &matView );
m_pd3dDevice->GetTransform( D3DTS_WORLD, &matWorld );
m = matWorld * matView;
D3DXMatrixInverse( &m, NULL, &m );
// Transform the screen space pick ray into 3D space
vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
vPickRayOrig.x = m._41;
vPickRayOrig.y = m._42;
vPickRayOrig.z = m._43; |
|