作者xtxml (赤木巧☠)
看板GameDesign
标题[程式] 想请问一下关於3D的Picking实现方式
时间Mon Apr 8 01:22:37 2013
先说说谷狗+自己目前的所知道的状况。
1.纯数学手段:ray picking(射线去遍历所有三角型)
自己有写好一套实现的代码,但似乎无法靠显卡来加速,
尤其是碰到有bone的模型,矩阵运算我都尽可能交给显卡处理,
要去做picking等於要再重算所有点,开始觉得不太可行。
2.open gl/DirectX特殊的处理法。
open gl可以用selection mode,做一次假rendering,
然後判定每个点的深度来做到picking的效果。
DirectX则感觉很麻烦,虽然可以用D3DXIntersect来做到,
但是他提供的函式界面实在不好操作,绑死DX系统,很难做整合。
3.算出涵盖模型范围的长方体,用这个长方体做picking。
虽然牺牲掉精度,但可以接受。
碰到难处的部分一样是有bone的模型,这个长方体是否该随时去更新?
感觉一直去比对好像也是很蠢的做法。
评估了以上3种方法,感觉好像都有不太理想的地方...
因此想请教一下,真正游戏会实作的方式是如何?
或者美术输出模型的时候会带有哪些特殊的资料,以供picking使用?
还请各位前辈指教,感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.163.46
1F:→ azureblaze:一般是2.的gl方法 DX应该也有一样的东西 04/08 01:24
2F:→ azureblaze:然後他不是用深度判断,而是给不同物件不同颜色 04/08 01:25
3F:→ azureblaze:最後看那个点是哪个物件的颜色 04/08 01:26
4F:→ azureblaze:不过用2.之前通常会用3.挑掉不可能被选到的物件 04/08 01:27
5F:→ azureblaze:3.可以google看看dynamic octree 04/08 01:29
哦哦,十分感谢,那我先去查一下这部分的内容...
您的回应速度快到让我吓到@@ (没想到深夜冷门板会这麽快得到回覆XD)
6F:推 cjcat2266:可以用broad phase先快速筛选掉AABB没有跟ray相交的物件 04/08 03:54
7F:→ cjcat2266:然後再用narrow phase选出真正的相交物件 04/08 03:54
8F:→ cjcat2266:我蛮多同学都使用dynamic AABB tree架构的,可以试试看 04/08 03:55
9F:→ cjcat2266:Box2D有2D版的dynamic AABB tree程式码供参考 04/08 03:55
还没实际建立过AABB tree,相关的演算法我会去了解一下,感谢您:)
※ 编辑: xtxml 来自: 123.193.163.46 (04/08 07:35)
10F:推 Killercat:其实用1 配上AABB 不会很痴效能 04/08 09:52
11F:→ Killercat:另外AABB不算tree啦 不过就是一种BB的做法而已 04/08 09:53
12F:推 cjcat2266:Dynamic AABB tree是tree结构,存放不同阶层的AABB 04/08 10:12
13F:→ cjcat2266:是用来实作broad phase的一种spacial partition结构 04/08 10:13
14F:→ silveriii:bounding volume hierarchy + space partition 04/08 15:27
15F:推 lovesnake:楼上正名。 04/09 17:45