游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11460|回复: 11

请教关于D3D中屏幕坐标转换3D坐标的问题

[复制链接]

15

主题

248

帖子

248

积分

中级会员

Rank: 3Rank: 3

积分
248
发表于 2005-12-8 21:22:00 | 显示全部楼层 |阅读模式
最近在做3D区域鼠标拣选的程序

请教一下各位前辈,

根据ProjectMetrix和ViewPort得到的的射线,如何判定该射线与3D空间内多边形的位置情况

或者

如何判断一条射线是否穿过一个多边形区域

以前只做过线段判定,射线没接触过,所以……

另外,不知道有没有比较简单的方法可以直接得到3D区域内一点的屏幕坐标!!

希望各位前辈能够帮忙解决一下这个问题,或者给点提示!谢谢!!!!!!!!

16

主题

83

帖子

103

积分

注册会员

Rank: 2

积分
103
QQ
发表于 2005-12-9 17:33:00 | 显示全部楼层

Re:请教关于D3D中屏幕坐标转换3D坐标的问题

3D空间到屏幕2D空间
D3DXVec3Project

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-12-9 20:05:00 | 显示全部楼层

Re:请教关于D3D中屏幕坐标转换3D坐标的问题

楼上高得很......

获取view和proj矩阵,然后....不记得了,看看pick里的吧,可以得到一条射线,然后就是找交点了

15

主题

248

帖子

248

积分

中级会员

Rank: 3Rank: 3

积分
248
 楼主| 发表于 2005-12-10 14:28:00 | 显示全部楼层

Re:请教关于D3D中屏幕坐标转换3D坐标的问题

呵呵,这么好用的函数我都不知道……多谢多谢!!

我用的是不用移动的矩形区域,只要得到3D空间中顶点的屏幕坐标就可以了。不过我还是希望能够找到一个针对于3D空间多边形捡取的通用算法,因此……

我大概看过一些资料,根据ViewPort和ProjectMatrix得到从视点(0,0,0)到发射矩阵窗口(pz=1时)的向量,然后对视点坐标和向量分别用ViewMatrix的逆进行转换,得到3D空间中从视点到屏幕坐标点的向量,最后判断该向量是否穿过多边形区域……

我很头痛最后的判断,

判断一条射线是否穿过一个多边形区域

不知道哪里可以找到这种判断算法,最好能找到现成的算法让我研究研究……

再次感谢楼上两位前辈的支持!!

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-12-10 14:59:00 | 显示全部楼层

Re:请教关于D3D中屏幕坐标转换3D坐标的问题

非常简单,只需要联列出一个线性方程组,求出点在平面上的坐标就可以了。如果是针对三角形的话,适当选取参数,会出一个解,这个解是三角形的坐标系的坐标,很轻松就能判断内外。,如果多边形的话,要分凸包和非凸包,凸包判断是否在每一边的同侧,非凸包需要将其切割成为多个凸包来求解。

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2005-12-10 16:06:00 | 显示全部楼层

Re: Re:请教关于D3D中屏幕坐标转换3D坐标的问题

Carl: Re:请教关于D3D中屏幕坐标转换3D坐标的问题

判断一条射线是否穿过一个多边形区域

不知道哪里可以找到这种判断算法,最好能找到现成的算法让我研究研究……



D3DXIntersect
D3DXIntersectSubset
D3DXIntersectTri

具体怎么使用你去查DX SDK。

15

主题

248

帖子

248

积分

中级会员

Rank: 3Rank: 3

积分
248
 楼主| 发表于 2005-12-10 16:56:00 | 显示全部楼层

Re:请教关于D3D中屏幕坐标转换3D坐标的问题

需要先投影?这种方法我以前也考虑过,不过投影后还要进行平面上的判断,而且我对线性代数方面有点……

刚才看到一个 Intersection test 算法——

假设射线为V,V.Origin表示射线源的坐标(x,y,z),V.Direction表示射线的方向(v1,v2,v3);
三角形为T,T的3个顶点分别为P1,P2,P3。

首先计算V.Origin到T的3个顶点的向量VP1,VP2,VP3,然后组成矩阵
VP1.X, VP2.X, VP3.X,
VP1.Y, VP2.Y, VP3.Y,
VP1.Z, VP2.Z, VP3.Z,

下来对上面的矩阵求转制,最后左乘V.Direction的到一个3维向量,

如果这个3维向量的每个值都在[0,1]范围内,则 Intersection test 返回 true

我有点搞不清楚,最后[0,1]的范围判定表示什么意思……

15

主题

248

帖子

248

积分

中级会员

Rank: 3Rank: 3

积分
248
 楼主| 发表于 2005-12-10 17:01:00 | 显示全部楼层

Re: Re: Re:请教关于D3D中屏幕坐标转换3D坐标的问题

King_jinjing: Re: Re:请教关于D3D中屏幕坐标转换3D坐标的问题




D3DXIntersect
D3DXIntersectSubset
D3DXIntersectTri

具体怎么使用你去查DX SDK。



呵呵,谢谢!!!
那再问一下,函数里面的返回值 PU, PV分别表示什么意思啊??
还有这些算法有没有进行优化处理,比如加载一个bondingbox。

11

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2005-12-10 17:22:00 | 显示全部楼层

Re:请教关于D3D中屏幕坐标转换3D坐标的问题

你走运啊,我正在写一个第一人称的射击游戏,你说的问题,我刚刚研究过。
简单说一下,如果你向我一样,只要一条射线的话,你可以取眼睛的位置和看的方向,就是设置view矩阵里的函数里的两个参数,不过要简单转换一下方向,我上网时间少,你可以给我写邮件,说具体点。applell@126.com
如果这个3维向量的每个值都在[0,1]范围内 是指重心坐标。这个网站上有具体解释那个pick事例的文章,或者你搜索一下“重剑空间”有惊喜。顺便问一下,你是美女吗?是的话,给我写邮件哦,我给你具体指导一下!!!

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2005-12-10 17:46:00 | 显示全部楼层

Re: Re: Re: Re:请教关于D3D中屏幕坐标转换3D坐标的问题

Carl: Re: Re: Re:请教关于D3D中屏幕坐标转换3D坐标的问题




呵呵,谢谢!!!
那再问一下,函数里面的返回值 PU, PV分别表示什么意思啊??
还有这些算法有没有进行优化处理,比如加载一个bondingbox。


PU,PV是输出的纹理坐标。

关于这个算法,能用就好了,优化是你最后自己做的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 03:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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