游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3677|回复: 9

平面鼠标位置怎么转化成3D里地面的坐标啊?

[复制链接]

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
QQ
发表于 2007-10-16 18:01:00 | 显示全部楼层 |阅读模式
我想在用3D空间鼠标控制角色移动,地面是一个y为0的平面,怎么才能把鼠标点的位置映射到地面的位置上啊?
请大家指点下.......

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2007-10-17 13:01:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

同问

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2007-10-17 17:16:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

基本上点从2D到3D没办法转换,因为缺一维,只能将2d屏幕点转换为3d空间中从摄像机点出发的一条射线。
然后在这条射线上根据需要取一点。需要不同,取法不同。
比较常用的一种需求是pick ,d3dsdk有例子,大部分的3d引擎应该也会提供pick的例子。

3

主题

7

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2007-10-17 17:26:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

所谓pick,其原理基本如下:
当你的鼠标点击到屏幕上某点,这个点是通过了深度测试的,因此,在深度缓存中存有此点对应的深度,有了深度,在加上二维屏幕坐标,就可以有三维了,然后就可以通过当前的变换矩阵进行逆变换来得到场景中鼠标点的真正三维坐标,也就是搂主说的“地面的坐标了”。具体程序可以参考sdk中的对应例子

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2007-10-18 09:18:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

楼上说的没看懂,pick 地面的话,是拿转换出得射线和地面求交,交点就是鼠标点选中的地面位置。
如何从屏幕上得到通过深度测试的点以及深度信息?残念

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-10-18 10:14:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

看sdk pick的例子不就明白了

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-10-18 10:34:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

sdk 的pick 也有不健全的地方,它没有考虑被拾取对象的移动。
里面的射线和平面相交,算法有多种实现,倒是很值得借鉴

16

主题

57

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2007-10-18 12:51:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

只是用射线检测pick的话,不需要深度信息。
因为屏幕空间上的点可以转换到投影空间的近剪截面上,然后用投影矩阵的逆矩阵转化到摄像机空间中。

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
QQ
 楼主| 发表于 2007-10-18 13:00:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?


貌似我以前理解错了,以为直视前方的话,射线应该是平行地面的,永远不能和它相交
还没学图形学就是不好,要恶补下

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-10-18 17:13:00 | 显示全部楼层

Re:平面鼠标位置怎么转化成3D里地面的坐标啊?

被拾取的对象移动应该算逻辑层吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 17:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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