2009-07-09 63 views
2

我一直在尋找一個關於3D每頂點碰撞系統的教程(使用C#和XNA,因爲我已經可用),但只有能夠放在一起的零碎。在這一點上我有一個很好的理解,但是我的理解中有一個相當大的,明顯的漏洞。尋找教育/示例教育自己在每個多維3D碰撞

基本上,我的問題歸結爲:我如何獲得多晶硅和他們的信息?

有沒有人有任何好的參考?

注意:雖然我使用XNA並且對該系統最感興趣,但這更像是一種自我教育的練習,而且我對如何在其他系統中執行此操作感興趣(如OpenGL,等等)

澄清: 我的意思是「如何獲得多晶硅」,如果我有一個3D對象,甚至是應用於該對象的動畫,是否有一個系統用於檢索渲染的多晶硅'測試的信息(職位等)?最合理的做法是在poly信息被渲染後檢索poly信息,但這聽起來非常昂貴,我不知道如何去做這件事。我不確定是否有更好的方法,或者如果在該級別檢索提供的信息甚至是可能的。

+1

碰撞檢測是完全獨立於XNA/OpenGL /等。我並不確定你的意思是「如何獲得多邊形及其信息?」,你可以從任何你想要的地方(模型,文件,大腦等)獲得多邊形。 – Zifre 2009-07-09 14:41:32

回答

2

您可以從模型中獲取多邊形信息。將會有一組調用和/或方法返回你的東西,如點列表,法線,紋理座標等,以及引用這些其他數組的面的列表。

一旦將數據發送到顯卡進行渲染,它可能(以前很好)很難獲得。同樣,一旦它被渲染,信息是在2D而不是3D。

如果僅因爲即使是中度複雜的模型也可能包含數百個(如果不是數千個)多邊形,則每個多邊形碰撞都很昂貴。第一步是通過執行邊界框碰撞嘗試並消除大部分信息。這些會告訴你,場景中的大多數物體不會相互碰撞。然後,您可以專注於邊界框以某種方式相交的情況。使用邊界球是另一種方式,可能會給你更少的誤報,因爲球體會比盒子更緊密地約束物體。雖然計算可能會更貴一些。

下一步是將測試對象中的每個多邊形取出並與其他對象進行覈對。再次從邊界框/球體測試開始,然後檢查其他對象中的所有多邊形。

你需要的數學應該涵蓋在任何像樣的3d圖形書籍上。