|

楼主 |
发表于 2010-3-10 10:33:00
|
显示全部楼层
Re:请问如何实现模型跟着鼠标移动?
我的需求只是单击一个模型然后模型跟着鼠标在一个平面地形模型上移动,然后单击一下就在模型可以移动的范围内(不超出平面地形模型)确认位置,功能就这个,不需要复选模型、框选多个模型等操作,请问tonykee兄既然是过来人,能指点一二吗?
POINT ptCursor;
GetCursorPos(&ptCursor);
ScreenToClient(DXUTGetHWND(), &ptCursor);
int iWidth, iHeight; // 后台缓冲区宽度高度
iWidth = DXUTGetBackBufferSurfaceDesc()->Width;
iHeight = DXUTGetBackBufferSurfaceDesc()->Height;
// 将鼠标坐标转换为三维空间
D3DXVECTOR3 vMouse;
vMouse.x = ((( 2.0f * ptCursor.x ) / iWidth ) - 1 ) / matProj._11;
vMouse.y = -((( 2.0f * ptCursor.y ) / iHeight ) - 1 ) / matProj._22;
vMouse.z = 1.0f;
D3DXVECTOR3 vMousePt, vEyePt;
vEyePt = *g_Camera.GetEyePt();
D3DXPLANE plane;
D3DXVECTOR3 v1(1.0f,0.0f,1.0f);
D3DXVECTOR3 v2(-1.0f,0.0f,1.0f);
D3DXVECTOR3 v3(-1.0f,0.0f,-1.0f);
D3DXPlaneFromPoints( &plane, &v1, &v2, &v3 );// 从三点构造一个平面
D3DXPlaneIntersectLine( &vMousePt, &plane, &vEyePt, &vMouse );// 找出直线跟平面的交点。
D3DXVECTOR3 vOut;
//D3DXMatrixIdentity(&g_matSceneWorld);
D3DXVec3TransformNormal(&vOut, &vMousePt, &g_matSceneWorld);
g_fTestX = vMouse.x;
g_fTestZ = vMouse.y;
D3DXMatrixTranslation(&g_matTest, g_fTestX, .0f, g_fTestZ);// 这里如果直接转换成模型的世界矩阵,模型确实可以动但并没有紧贴鼠标,请问过程中我缺乏了哪些呢? |
|