游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3585|回复: 6

如何将3D场景中鼠标位置转换为世界三维坐标 ?

[复制链接]

7

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2007-3-25 16:42:00 | 显示全部楼层 |阅读模式
我想用鼠标控制人物在3D场景中移动,是不是应该获得其对应的世界空间坐标,若是,该如何求?

3

主题

89

帖子

89

积分

注册会员

Rank: 2

积分
89
QQ
发表于 2007-3-25 19:52:00 | 显示全部楼层

Re:如何将3D场景中鼠标位置转换为世界三维坐标 ?

屏幕上某个位置(x,y),如果不结合深度(z),那么可以在屏幕空间定义一条射线:出发点为(x,y,0),方向(0,0,1),这条射线可以映射为三维空间中的一条射线,将这条射线与场景求交就能获得交点位置。

映射是World*View*Projection的逆变换,D3DX库中也有辅助函数。

射线求交可以借助空间分割结构来加速(kd-tree/octree等)。

7

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2007-3-25 21:59:00 | 显示全部楼层

Re:如何将3D场景中鼠标位置转换为世界三维坐标 ?

谢谢zybx,我去试试

7

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2007-3-26 20:01:00 | 显示全部楼层

Re:如何将3D场景中鼠标位置转换为世界三维坐标 ?

                POINT screenPt;
             GetCursorPos(&screenPt);
             ScreenToClient(m_App->GethWnd(),&screenPt);
                 D3DXVECTOR3 vecMouse=D3DXVECTOR3((float)screenPt.x,(float)screenPt.y,0.0f);
                 D3DXVECTOR3 dir=D3DXVECTOR3(0,0,1);
                 D3DXMATRIX matProj,matView,matWorld;
                 D3DXVECTOR3 mouseInworld,dirInworld;
                 m_App->m_Graphics.GetDeviceCOM()->GetTransform(D3DTS_VIEW,&matView);
             m_App->m_Graphics.GetDeviceCOM()->GetTransform(D3DTS_WORLD,&matWorld);
                 m_App->m_Graphics.GetDeviceCOM()->GetTransform(D3DTS_PROJECTION,&matProj);
                 D3DXMATRIX m1,m2;
                 m1=matWorld*matView*matProj;
                 D3DXMatrixInverse(&m2,NULL,&m1);
                 D3DXVec3TransformCoord(&mouseInworld, &vecMouse, &m2);
               D3DXVec3TransformNormal(&dirInworld, &dir, &m2);

7

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2007-3-26 20:05:00 | 显示全部楼层

Re:如何将3D场景中鼠标位置转换为世界三维坐标 ?

映射为三维空间的一条射线上述方法对吗?
点和方向都需映射吗?

7

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2007-3-27 10:33:00 | 显示全部楼层

Re:如何将3D场景中鼠标位置转换为世界三维坐标 ?

哪位高手帮我看一下?

44

主题

305

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-3-29 21:25:00 | 显示全部楼层

Re:如何将3D场景中鼠标位置转换为世界三维坐标 ?

建议去看看DX示例里的PICK
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-13 00:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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