游戏开发论坛

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

请问如何实现模型跟着鼠标移动?

[复制链接]

16

主题

68

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2010-3-9 00:23:00 | 显示全部楼层 |阅读模式
在一个平面内(y值忽略),像3D地图编辑器一样当用户移动鼠标的时候相应的模型能贴着鼠标移动。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-3-9 19:59:00 | 显示全部楼层

Re:请问如何实现模型跟着鼠标移动?

大量使用到平面和射线相交,屏幕框选矩形形成的小视椎相交等算法,仔细观察3dmax的拖放,仿造着做就好了
这部分功能比较繁琐很罗嗦,我过去写过,感受就是直冒青筋

16

主题

68

帖子

72

积分

注册会员

Rank: 2

积分
72
 楼主| 发表于 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);// 这里如果直接转换成模型的世界矩阵,模型确实可以动但并没有紧贴鼠标,请问过程中我缺乏了哪些呢?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-3-10 12:55:00 | 显示全部楼层

Re:请问如何实现模型跟着鼠标移动?

实时测量拾取射线和物体自身轴心的xz平面,移动的时候
算出交点在x,z面的移动前后的offset, 物体的x,z加上这个分量就好了,思路就是如此
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-12 18:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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