[程式] 想請問一下關於3D的Picking實現方式

看板GameDesign作者 (赤木巧☠)時間12年前 (2013/04/08 01:22), 編輯推噓4(4011)
留言15則, 5人參與, 最新討論串1/1
先說說谷狗+自己目前的所知道的狀況。 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

04/08 01:24, , 1F
一般是2.的gl方法 DX應該也有一樣的東西
04/08 01:24, 1F

04/08 01:25, , 2F
然後他不是用深度判斷,而是給不同物件不同顏色
04/08 01:25, 2F

04/08 01:26, , 3F
最後看那個點是哪個物件的顏色
04/08 01:26, 3F

04/08 01:27, , 4F
不過用2.之前通常會用3.挑掉不可能被選到的物件
04/08 01:27, 4F

04/08 01:29, , 5F
3.可以google看看dynamic octree
04/08 01:29, 5F
哦哦,十分感謝,那我先去查一下這部分的內容... 您的回應速度快到讓我嚇到@@ (沒想到深夜冷門板會這麼快得到回覆XD)

04/08 03:54, , 6F
可以用broad phase先快速篩選掉AABB沒有跟ray相交的物件
04/08 03:54, 6F

04/08 03:54, , 7F
然後再用narrow phase選出真正的相交物件
04/08 03:54, 7F

04/08 03:55, , 8F
我蠻多同學都使用dynamic AABB tree架構的,可以試試看
04/08 03:55, 8F

04/08 03:55, , 9F
Box2D有2D版的dynamic AABB tree程式碼供參考
04/08 03:55, 9F
還沒實際建立過AABB tree,相關的演算法我會去了解一下,感謝您:) ※ 編輯: xtxml 來自: 123.193.163.46 (04/08 07:35)

04/08 09:52, , 10F
其實用1 配上AABB 不會很痴效能
04/08 09:52, 10F

04/08 09:53, , 11F
另外AABB不算tree啦 不過就是一種BB的做法而已
04/08 09:53, 11F

04/08 10:12, , 12F
Dynamic AABB tree是tree結構,存放不同階層的AABB
04/08 10:12, 12F

04/08 10:13, , 13F
是用來實作broad phase的一種spacial partition結構
04/08 10:13, 13F

04/08 15:27, , 14F
bounding volume hierarchy + space partition
04/08 15:27, 14F

04/09 17:45, , 15F
樓上正名。
04/09 17:45, 15F
文章代碼(AID): #1HOQjVgQ (GameDesign)