專利名稱:使用立方體圖的實時多分辨率3d沖突檢測的制作方法
使用立方體圖的實時多分辨率3D沖突檢測
背景技術(shù):
在三維(3D)圖形中的沖突檢測是確定兩個對象是否彼此接觸的處理 過程,其中這兩個對象通常是包括鏈接的多個多邊形(例如三角形)的剛 性體。通常,這通過使處理器執(zhí)行算法以計算一個對象的三角形是否在空 間上與另一個對象的三角形相沖突來實現(xiàn)。盡管存在針對這個問題的多種
方案,但所有標(biāo)準(zhǔn)解決方案都使用處理器來執(zhí)行包括以下步驟的計算使 用空間數(shù)據(jù)結(jié)構(gòu),例如八叉樹,來測試對象到對象的沖突;并隨后執(zhí)行一 系列幾何計算,來為其包圍體(bounding volume)顯示為是相交候選的那 些對象評價多面體到多面體的沖突。
當(dāng)在諸如中央處理單元(CPU)之類的處理器中執(zhí)行時,用于沖突檢 測的這些常規(guī)方案會占用相當(dāng)大的計算資源,這些資源在進(jìn)行諸如物理計 算之類的CPU專用任務(wù)或執(zhí)行人工智能例程時能夠得到更好的利用,尤其 是在3D游戲背景中。而且,通過在CPU中而不是在諸如圖形處理單元 (GPU)之類的專用圖形處理器中執(zhí)行沖突檢測,常規(guī)方案不能利用由現(xiàn) 代圖形紋理采樣硬件所支持的硬件圖元。
包含在說明書中,并組成其一部分的附圖示出了與本發(fā)明原理相一致 的一個或多個實施方式,附圖與本發(fā)明的說明一起解釋這些實施方式。附 圖并非一定是按照比例繪制的,相反地,重點在于示出本發(fā)明的原理。在 附圖中,
圖1示出了根據(jù)本發(fā)明一些實施方式的3D渲染引擎或裝置的多個部
分;
圖2是示出根據(jù)本發(fā)明一些實施的一個處理過程的流程圖; 圖3是示出根據(jù)本發(fā)明一些實施的一個處理過程的流程圖; 圖4-7示出了多個實例方案,用于論述圖2和3中的處理過程;及圖8示出了根據(jù)本發(fā)明一些實施方式的一個系統(tǒng)。
具體實施例方式
以下說明參考了附圖。在不同附圖中相同的參考數(shù)字標(biāo)記用于標(biāo)識相 同或相似的元件。盡管以下說明通過闡述特定細(xì)節(jié),例如具體結(jié)構(gòu)、架構(gòu)、 接口、技術(shù)等,提供了對所聲明的發(fā)明的不同方面的全面理解,但此類細(xì) 節(jié)是為了解釋的目的而提供的,不應(yīng)視為限制性的。而且,按照本公開內(nèi) 容,本領(lǐng)域技術(shù)人員會意識到,可以在脫離這些特定細(xì)節(jié)的其它實例或?qū)?施方式中實現(xiàn)所聲明的發(fā)明的各種方面。在以下的公開內(nèi)容中的某些時機(jī), 省略了對公知的裝置、電路和方法的說明,以避免由于不必要的細(xì)節(jié)而使 本發(fā)明的說明不清楚。
圖1是根據(jù)所聲明的發(fā)明的一些實施方式的3D渲染引擎100的多個部 分的簡化框圖。弓l擎100包括沖突檢測算法102、紋理采樣器104、和紋 理存儲器106。本領(lǐng)域技術(shù)人員會認(rèn)識到,3D渲染引擎可以包括其它組件 (例如鑲嵌單元(tessellation unit),頂點著色器等),已經(jīng)從圖1排除了這 些組件,以便不會混淆本發(fā)明的實施。另外,盡管本發(fā)明不限于這一點, 圖1包括像素著色器108,其可以將算法102耦合到紋理采樣器104。而且, 盡管圖1示出了一個紋理采樣器104,但是本領(lǐng)域技術(shù)人員會認(rèn)識到,在不 脫離所聲明的發(fā)明的范圍和精神的情況下,可以實現(xiàn)一個以上的紋理采樣 器,和/或這些紋理采樣器耦合到?jīng)_突檢測算法102和/或存儲器106。
沖突檢測算法102可以包括檢測例程,所述檢測例程包括可以用于檢 測對象之間的沖突的軟件和/或固件的任何組合。為此,算法102可以為紋 理采樣器104提供一個或多個査詢索引。可替換地,算法102可以為著色 器108提供一個或多個查詢索引,并且著色器108可以將這些索引傳送到 紋理采樣器104。采樣器104隨后可以使用這些索引來訪問在紋理存儲器 106中保存或存儲的紋理圖的相應(yīng)紋理地址處所存儲的距離數(shù)據(jù),所述距離 數(shù)據(jù)以下會更詳細(xì)解釋。本領(lǐng)域技術(shù)人員會認(rèn)識到,算法102可以包括沖 突檢測核,其由在支持引擎100的計算系統(tǒng)上執(zhí)行的3D圖形應(yīng)用程序(未 示出)產(chǎn)生。可替換地,算法102可以包括由像素著色器108產(chǎn)生的沖突 檢測核。本領(lǐng)域技術(shù)人員還會認(rèn)識到,術(shù)語對象、幾何結(jié)構(gòu)、多邊形、體和多面體可以互換地使用。
紋理采樣器104可以是能夠根據(jù)由算法102提供的一個或多個查詢索 引來訪問存儲器106中的紋理數(shù)據(jù)的任何紋理采樣邏輯,包括硬件、軟件 和域固件的任何組合。根據(jù)本發(fā)明的一些實施方式,存儲在存儲器106中 并由采樣器104訪問的紋理數(shù)據(jù)可以包括紋理圖,例如立方體圖,其包括 存儲距離值的像素(或"紋理像素(texds)")陣列,所述距離值以下會更 詳細(xì)解釋。采樣器104隨后可以使用由算法102提供的索引來確定用于訪 問存儲和/或保存在存儲器106中的相應(yīng)距離值的相關(guān)紋理地址。采樣器104 隨后可以使用這些距離值產(chǎn)生插值的距離值,并可以將這些插值距離值提 供給算法102,如以下會更詳細(xì)說明的??商鎿Q地,采樣器104可以將這些 距離值提供給著色器108,著色器108可以產(chǎn)生插值距離值,并將這些插值 距離值提供給算纟去102。
紋理存儲器106可以包括適合于存儲和/或保存一個或多個紋理圖(例 如一個或多個立方體圖)的任何存儲裝置或機(jī)構(gòu),并指定了紋理像素數(shù)據(jù), 例如距離值。盡管存儲器106可以包括任何易失性或非易失性存儲技術(shù), 例如隨機(jī)存取存儲器(RAM)存儲器或閃存,但是本發(fā)明決不受所使用的 用作存儲器106的存儲器類型的限制。
圖2是示出根據(jù)本發(fā)明一些實施方式的處理處理過程200的流程圖。 盡管為了易于解釋,可以針對圖1的引擎100來說明處理過程200,但所要 求發(fā)明不限于這一點,由根據(jù)所聲明的發(fā)明的適當(dāng)裝置支持的其它處理過 程或方案也是可行的。
處理過程200可以開始于第一多面體的接收[動作202]和第二多面體的 接收[動作204]。根據(jù)一些實施方式,動作202和204例如可以包括沖突檢 測算法102接收第一和第二三角形的頂點坐標(biāo),例如,在這里相對于可由 3D圖形應(yīng)用程序(未示出)實現(xiàn)的一個模型坐標(biāo)系來定義這些坐標(biāo)。這個 3D圖形應(yīng)用程序可以產(chǎn)生算法102,并可以為算法102提供幾何圖元,例 如三角形。
本領(lǐng)域技術(shù)人員會認(rèn)識到,作為總沖突檢測過程的一部分,算法102 在動作202和204之前可能已經(jīng)使用空間數(shù)據(jù)結(jié)構(gòu)(例如八叉樹或kd樹) 使3D圖形對象經(jīng)過了瑣碎拒絕階段(trivial reject phase)。在如此進(jìn)行時,算法102可能已經(jīng)確定了兩個對象, 一個包括動作202的第一多面體,另 一個包括動作204的第二多面體,已經(jīng)通過了這個瑣碎拒絕階段,從而這 兩個對象是進(jìn)一步?jīng)_突檢測測試的候選。與進(jìn)行沖突檢測過程的瑣碎拒絕 階段的各種方法有關(guān)的細(xì)節(jié)超出了所聲明的發(fā)明的范圍,并且是本領(lǐng)域公 知的。
處理過程200還可以包括產(chǎn)生用于存儲距離值的紋理圖[動作206〗。 根據(jù)本發(fā)明的一些實施方式,可以在處理過程200中任何其它步驟之前進(jìn) 行的預(yù)處理階段中,由應(yīng)用軟件來進(jìn)行動作206。在本發(fā)明的其它實施方式 中,可以在與處理過程200的其它動作同時的運行時間中,由應(yīng)用軟件來 進(jìn)行動作206。無論如何,本發(fā)明不受何時進(jìn)行動作206的限制。
圖3是示出了處理過程300的流程圖,根據(jù)本發(fā)明一些實施,可以進(jìn) 行處理過程300來產(chǎn)生根據(jù)處理過程200的動作206的用于存儲距離值的 紋理圖。盡管為了易于解釋,可以針對圖1的引擎IOO來說明處理過程300, 但所聲明的發(fā)明不限于這一點,由根據(jù)所聲明的發(fā)明的適當(dāng)裝置支持的其 它處理過程或方案也是可行的。
圖4示出了一個代表性的立方體圖標(biāo)記方案400,雖然該方案400有助 于對處理過程300和/或相關(guān)處理過程的論述,但是其決不應(yīng)解釋為限制所 聲明的發(fā)明。方案400顯示了3D立方體元402,如本領(lǐng)域技術(shù)人員會 認(rèn)識到的,圖元402可以對應(yīng)于如由公知的3D圖形應(yīng)用程序(例如DirectX) 所定義的標(biāo)準(zhǔn)立方體元,盡管本發(fā)明并不限于具體的立方體元。 圖402可以由6個二維(2D)紋理圖404-409組成,這些紋理圖被排列為 立方體的面,其中,圖404-409每一個都可以包括8X8的像素陣列,并且 其中,圖404-409中的每一個像素都能夠存儲浮點距離值,如以下會更詳細(xì) 解釋的。然而,本發(fā)明并不限于圖404-409的特定分辨率,且本發(fā)明也不限 于在圖404-409中的像素位置上所存儲的數(shù)據(jù)類型。而且,本領(lǐng)域技術(shù)人員 會認(rèn)識到,3D立方體圖402的2D圖404-409每一個都可以被視為是數(shù)值 的査詢表,這些數(shù)值可以通過使用指定圖404-409的具體像素的索引來訪 問。
如本領(lǐng)域技術(shù)人員會認(rèn)識到的,2D圖404-409中的每一個像素的坐標(biāo) 都可以由3D方向向量410來索引,該方向向量以立方體圖402的原點412為起點。在本發(fā)明的一些實施方式中,原點412可以對應(yīng)于對象(例如多 面體)的質(zhì)心,如以下會更詳細(xì)解釋的。然而,本發(fā)明不限于如何定義原 點412,因此,例如,原點412可以包括對象的外心。本領(lǐng)域技術(shù)人員還會 認(rèn)識到,可以定義一組唯一的方向向量,以使得這組向量中的每一個向量 都穿過一個2D圖404-409中的相應(yīng)像素。例如,向量410穿過圖408中的 像素414,在此圖408對應(yīng)于立方體圖402的+X面,并且在此像素414可 以對應(yīng)于圖402的一個具體的(u,v)紋理坐標(biāo)對。因此,向量410可以由原 點412和對應(yīng)于像素414的紋理坐標(biāo)對來定義。
根據(jù)本發(fā)明的一些實施方式,原點412可以是對象的質(zhì)心或?qū)ο蟮耐?心。然而本發(fā)明不限于這一點,因此原點412可以包括位于對象內(nèi)的任何 點。而且,盡管在處理過程200和300中所用的紋理圖元可以包括立方體 元,但本發(fā)明不限于這一點,因此,例如,可以使用其它3D紋理圖元 來進(jìn)行處理過程200和300,例如采用了多于6個2D面的紋理圖元,或者 例如拋物面或球面紋理圖元。
處理過程300可以開始于對第一多面體的原點的確定[動作302],在此 該多面體與在處理過程200的動作202中所接收的多面體是同一個多面體。 本領(lǐng)域技術(shù)人員會將用于確定多面體的包圍球(bounding sphere)的公知技 術(shù)認(rèn)知為根據(jù)動作302確定多面體原點的一種方式。為了論述的原因,圖5 示出了方案500,其用于根據(jù)動作302的一些實施方式確定包圍球。盡管為 了說明的目的,圖5以2D形式示出了包圍球502和相關(guān)的多面體504,但 可以在產(chǎn)生3D包圍球的3D多面體上進(jìn)行動作302的實施。
本領(lǐng)域技術(shù)人員會認(rèn)識到,包圍球502表示一個假定球面,該假定球 面包圍多面體504,從而使球面502的標(biāo)量半徑505定義了從該球的中心 506到多面體504任意點的最大距離。當(dāng)如此定義時,球502的中心506表 示多面體504的質(zhì)心。因此,作為動作302的結(jié)果,可以確定第一多面體 的原點,例如質(zhì)心。然而,如上指出的,本發(fā)明并不限于如何確定或定義 對象的原點。因此,根據(jù)本發(fā)明,可以使用任一任意手段來確定要由處理 過程300處理的3D對象的原點。
處理過程300可以繼續(xù)進(jìn)行到接收立方體元[動作304],在此該圖 元包括6個2D紋理像素陣列。如上所述,立方體圖是公知的3D圖形圖元類型。處理過程300隨后可以繼續(xù)到確定從第一多面體的原點沿著以該原 點為起點并穿過立方體圖的像素的方向,到與第一多面體的面的交點之間 的距離值[動作306]。
圖6示出了方案600,用于根據(jù)動作306的一些實施確定距離值。圖6 顯示了多面體602和立方體圖604的2D橫截面。盡管為了說明的目的,圖 6示出了多面體602和圖604的2D橫截面,但可以對3D多面體進(jìn)行動作 306的執(zhí)行,導(dǎo)致了相對于3D立方體圖的距離值的確定。圖6顯示了圖604 的一個面608的像素Pl-P7的一個行606,在此,根據(jù)動作306的一些實施, 可以沿8個唯一方向612確定距離值,在此每一個方向612都在多面體602 的原點614開始,并穿過像素606之中單獨的一個。因此,例如,穿過像 素P7的方向616具有與多面體602的一個面的交點618和距離值620,距 離值620定義為在原點614與像素P7的位置之間以紋理空間單位計的距離。 以類似的方式,可以為圖6中的所有方向612,以及為立方體圖604的剩余 像素的所有其它方向(未示出),確定根據(jù)動作306的距離值。
盡管圖6顯示了立方體圖604的橫截面,在此圖604的每一面都可以 包括8X8像素陣列,從而使立方體圖604可以包括總共144個像素,但是 本發(fā)明并不限于在處理過程200和300中所用的立方體圖的具體分辨率。 因此,例如,可以對在處理過程300中所處理的每一個多面體以不同分辨 率的立方體圖來進(jìn)行動作306。例如,在動作302中接收的立方體圖可以包 括6個2D 16X16像素陣列,從而使得在處理過程200和300中所用的立 方體圖可以包括總共1,536個像素??商鎿Q地,在動作302中接收的立方體 圖可以包括6個2D 4X4像素陣列,從而使得在處理過程200和300中所 用的立方體圖可以包括總共96個像素。而且,本領(lǐng)域技術(shù)人員會認(rèn)識到, 可以通過僅沿方向的一個子集(例如僅沿方向612的子集)確定距離值并 且由在動作306中所確定的距離值對之間的線性內(nèi)插值來確定剩余的距離 值,來進(jìn)行動作306。
處理過程300可以繼續(xù)進(jìn)行到將距離值存儲為立方體圖的像素值[動作 308]。根據(jù)本發(fā)明的一些實施方式,動作308可以包括將在動作306中確定 的每一個距離值存儲為位于與該距離值相關(guān)的方向上的像素的像素值。例 如,如果動作306包括確定與方向616相關(guān)的距離值620,那么動作308就
ii可以包括將距離值620存儲為位于方向616上的像素P7的像素值。在本發(fā) 明的一些實施方式中,在動作306中確定且在動作308中存儲的那些距離 值可以包括浮點值,盡管本發(fā)明不限于具有特定數(shù)據(jù)格式的距離值。
而且,盡管在此提供的詳細(xì)說明指的是凸多面體,例如多面體504或 多面體602,但本發(fā)明并不限于這一點,在處理過程200/300中也可以使用 凹多面體。本領(lǐng)域技術(shù)人員會認(rèn)識到,可以將凸多面體定義為這樣的一個 對象,即其中,連接該對象的任意兩點的任何完整直線段都完全包含在該 對象內(nèi),而可以將凹多面體定義為這樣的一個對象,即其中,可以找到連 接該對象的兩個點的一條完整直線段,其中該線段并不完全包含在該對象 內(nèi)。
為了在處理過程200/300中使用凹多面體,可以確定與凹多面體的凸包 (convexhull)的包圍體,在此該凸包包圍體所具有的標(biāo)量半徑對應(yīng)于該對 象的原點與該對象的任意點之間的最大距離值。隨后可以在動作302中使 用這個凸包包圍體。可替換地,可以使用凸分解技術(shù)將凹幾何體劃分為更 小的凸幾何體。隨后可以使用處理過程200/300來檢測在這些凸子幾何體之 間的沖突。凸包包圍體和凸分解技術(shù)是本領(lǐng)域公知的,在此不再更詳細(xì)論 述。
再次參考處理過程200,在本發(fā)明的一些實施方式中,應(yīng)用程序,例如 3D圖形應(yīng)用程序,可以進(jìn)行處理過程300在預(yù)處理階段中的所有動作(即 在進(jìn)行處理過程200之前),并在動作206中向算法102提供產(chǎn)生的紋理圖。 可替換地,在本發(fā)明的其它實施方式中,算法102可以響應(yīng)于在由引擎100 執(zhí)行的3D渲染期間發(fā)生的每一個沖突檢測事件,以動態(tài)方式進(jìn)行處理過程 300。此外,對于在動作202中接收的每一個多面體,可能已經(jīng)在處理過程 300中產(chǎn)生了 (即在動作206中產(chǎn)生了 )用于存儲該多面體的距離值的相關(guān) 立方體圖,并且可以在處理過程300的進(jìn)一步動作中使用,如在以下更詳 細(xì)解釋的。根據(jù)本發(fā)明的一些實施方式,處理過程300可以產(chǎn)生立方體圖, 其保存或存儲在存儲器106中,在此,該立方體圖存儲了特定多面體的距 離值。
處理過程200可以繼續(xù)進(jìn)行到確定從第一多面體的原點到第二多面體 的頂點的第一距離值[動作208],在此第一距離沿著從第一多面體的原點延伸到第二多面體的頂點的方向向量。圖7示出了方案700,用于根據(jù)動作 208的一些實施方式來確定第一距離值。
圖7顯示了第一多面體702和第二多面體704,在此,根據(jù)動作208的 一些實施方式,可以在多面體702的原點706與多面體704的頂點708之 間沿方向向量710確定第一距離值705,方冋向量710從原點706開始并穿 過頂點708。類似地,例如,動作208可以包括確定在原點706與多面體 704的頂點714之間沿方向向量715的第一距離值712,方向向量715從原 點706開始并穿過頂點714。盡管為了說明的目的,圖7示出了多面體702 和704的2D橫截面,但可以針對3D多面體來進(jìn)行動作208的執(zhí)行,其導(dǎo) 致沿著由3D坐標(biāo)定義的方向向量的第一距離值的確定。在本發(fā)明的一些實 施方式中,可以在相應(yīng)的動作202和204中接收到第一和第二多面體之后, 由算法102來進(jìn)行動作208。
處理過程200隨后可以繼續(xù)進(jìn)行到通過執(zhí)行對紋理圖的一個或多個查 詢,來確定沿方向向量從第一多面體的原點到第一多面體的一個面的第二 距離[動作210]。再次參考圖7,在本發(fā)明的一些實施方式中,動作210可 以包括確定例如沿方向向量710從原點706到多面體702的面722的第二 距離720。在該實例中,確定第二距離720可以包括査詢在動作206中所 產(chǎn)生的紋理圖的像素725和726 (即動作308中)處存儲的距離值(即在 306中確定的),并隨后在這些距離值之間進(jìn)行線性內(nèi)插值,以便在動作210 中獲得第二距離720。
類似地,例如,動作210可以包括確定沿方向向量715從原點706到 面722的第二距離724。然后,在該實例中,確定第二距離724可以包括 查詢在動作206中所產(chǎn)生的紋理圖的像素727和728處存儲的距離值,隨 后在這些距離值之間進(jìn)行線性內(nèi)插值,以便在動作210中獲得第二距離724。 在本發(fā)明的一些實施方式中,動作210可以包括算法102為紋理采樣器104 提供像素相關(guān)的查詢索引(例如像素725和726或像素727和728)。采樣 器104隨后可以使用這些索引來產(chǎn)生相應(yīng)的存儲器地址,用于訪問在存儲 器106中所存儲的立方體圖的相應(yīng)像素的距離值。采樣器104隨后可以在 這些距離值之間進(jìn)行線性內(nèi)插值,并向算法102提供產(chǎn)生的插值距離值。 可替換地,采樣器104可以向算法102提供距離值,算法102可以在這些值之間進(jìn)行線性內(nèi)插值,以便在動作210中確定第二距離。
盡管在圖7中將每一個方向向量710和715都顯示為經(jīng)過或指定了分 別位于像素725和726及像素727和728之間的紋理坐標(biāo)對,但本發(fā)明并 不限于圖7中所示的2D表示。因此,例如,方向向量710和715任何一個 都可以經(jīng)過或指定位于立方體圖的一個面的兩個像素行或列之間的紋理坐 標(biāo)對。因此,動作210可以包括使用4個查詢索引來訪問在約束該紋理 坐標(biāo)對的這4個像素處存儲的距離值,并隨后在這4個距離值之間進(jìn)行雙 線性內(nèi)插值,以獲得第二距離值。然而,本發(fā)明不限于線性內(nèi)插值(雙線 性、三線性或其它的)。因此,例如,可以使用從紋理圖獲得的距離值的最 近的點采樣來進(jìn)行動作210。
在本發(fā)明的其它實施方式中,動作210可以包括算法102,算法102為 像素著色器108提供了與像素(例如像素725和726或像素727和728)相 關(guān)的查詢索引,并且著色器108可以將這些索引傳送到紋理采樣器104。采 樣器104隨后可以使用這些索引來產(chǎn)生相應(yīng)的存儲器地址,用于訪問在存 儲器106中所存儲的立方體圖的相應(yīng)像素的距離值,并將這些距離值提供 給著色器108。著色器108隨后可以在這些距離值之間進(jìn)行線性內(nèi)插值,并 將產(chǎn)生的插值距離值提供給算法102??商鎿Q地,著色器108可以將距離值 提供給算法102,算法102可以在這些值之間進(jìn)行線性內(nèi)插值,以便在動作 210中確定第二距離。
處理過程200可以隨后繼續(xù)進(jìn)行到比較第一距離值與第二距離值[動作 212],如果第二距離大于或等于第一距離,就檢測到在第一和第二多面體之 間的沖突[動作216]。再次參考圖7,動作212例如可以包括沿方向向量710 比較第一距離705與第二距離720。在此情況下,第一距離705大于第二距 離720,將不會檢測到?jīng)_突。然而,對于另一個實例,動作212可以包括沿 方向向量715比較第一距離712和第二距離724。在此情況下,第二距離 724大于第一距離712,因此在動作216中檢測到?jīng)_突。在本發(fā)明的一些實 施方式中,算法102可以進(jìn)行動作212的比較,并且如果第二距離大于或 等于第一距離,則在動作216中確定發(fā)生沖突。
盡管如上所述的動作208和210分別指的是確定第一和第二距離,且 盡管動作212指的是相互比較這兩個距離,但在本發(fā)明其它實施方式中,處理過程200可以包括確定這些距離的平方的動作,隨后在動作212中相 互比較這些距離的平方值。因此,在這些實施方式中,動作214可以包括 確定第二距離的平方是否大于或等于第一距離的平方。然而,本發(fā)明不限 于在動作212中比較距離或比較距離的平方。因此,例如,處理過程200 可以包括確定這些距離的平方根的動作,隨后在動作212中相互比較這些 距離的平方根值。
不必按所示的順序執(zhí)行在圖2和3中所示的動作;也不必執(zhí)行所有的 動作。此外,那些不依賴于其它動作的動作可以與所述其它動作并行地執(zhí) 行。例如,可以并行地進(jìn)行動作202和204??商鎿Q地,可以將動作202和 204合并到單一動作中。換句話說,可以在單一動作中進(jìn)行對第一和第二多 面體的接收。另外,如上指出的,動作206,即根據(jù)本發(fā)明一些實施方式的 立方體圖的產(chǎn)生,可以在處理過程200的所有其它動作之前進(jìn)行,或者可 替換地,動作206可以在動作202或204之后進(jìn)行或與其并行進(jìn)行。此外, 在該附圖中的至少一些動作可以實現(xiàn)為指令或指令組,所述指令或指令組 在機(jī)器可讀介質(zhì)中實現(xiàn)。
在本發(fā)明的一些實施方式中,在處理過程200和/或300中所用的算法 102可以包括以下偽代碼
Collision—Detection_Using_Cubemaps(...) bool Collision = false; Foreach vertex V2j of polygon P2 { Direction Vector = V2j — Ci; dl =texCube (DirectionVector}; d2 = distance (C! , V2J}; if(dl 〉= d2){ Collision = true; break; 〃沖突
If (Collision) {
//對沖突的相應(yīng)進(jìn)行建模} else {
〃無沖突,繼續(xù)進(jìn)行,以評估下一對幾何體的沖突檢測
在本發(fā)明的其它實施方式中,在處理過程200和/或300中所用的算法 102可以由引擎100的像素著色器108產(chǎn)生或與其相關(guān)聯(lián),并可以包括以下 高級著色語言(shading language)像素著色器代碼 PS—OUTPUT CollisionDetectionPS ( VS—OUTPUT In,
uniform bool bTexture)
PS_OUTPUT Output; int Index = 0; float sum = 0.0;
float fActualDist, fCubeMapDist;
float4 temp = (0, 0, 0, 1);
float4 ^VorldPos, M^orldCentroid, dir;
bool collision = false;
float2 tex;
//bool results[115];
int trouble = 0;
Output.RGBColor.r = Output.RGBColor.g = Output.RGBColor.b = Output.RGBColor.a = 0.0;
〃這些是用于索引像素中心并訪問對象的位置數(shù)據(jù)的紋理(u,v)坐標(biāo)
float disp = 0.5/g一iNumVertices[l]; tex.y = 0.5
//對象O的重心的全局位置
WorldCentroid = mul (g—vCentroids[O], g_mWorldMat0);〃經(jīng)過對象1的所有頂點的射線
for( Index = 0; Index < g一iNumVertices[l]; Index++)
tex.x = Index/g—iNumVertices[l] + disp;
//得到在紋理中存儲的對象1的頂點位置 WorldPos = tex2D (g一samPositionsl, tex);
//轉(zhuǎn)換到全局空間
WorldPos = mul (WorWPos, g一mWor畫atl); dir = WorldPos - WorldCentroid;
fActualDist = sqrt (dir.x*dir.x + dir.y*dir.y + dir.z*dir.z);
〃將方向轉(zhuǎn)換回通過與對象o的全局矩陣的逆相乘產(chǎn)生立方體圖的空間
dir = mul (dir, g一mWorldMatOInv); dir = normalize(dir);
temp = texCUBE(g一samCubeMapDistanceO, dir); fCubeMapDist = temp.x;
if (fCubeMapDist〉 fActualDist) { collision = true;
〃進(jìn)行與以上相同的計算,但是切換對象。從而現(xiàn)在循環(huán)遍歷對象O的頂點 disp = 0.5/g_iNumVertices
;
WorldCentroid = mul(g一vCentroids[l], g—mWorldMatl); for( Index = 0; Index < g—iNumVertices[O]; Index++ )
17tex.x = Index/14.0 + disp;
WorldPos = tex2D (g—samPositionsO, tex);
WorldPos = mul (WorldPos, g_mWorldMatO);
dir = WorldPos - WoridCentroid;
fActualDist = sqrt (dir.x*dir.x + dir.y*dir.y + dir.z*dir.z);
dir = mul (dir, g—mWorldMatllnv); dir = normalize (dir);
temp = texCUBE (g_samCubeMapDistancel, dir); fCubeMapDist = temp.x; if (fCubeMapDist > fActualDist) { collision = true;
if (collision = true) {
OutputRGBColor.r = Output.RGBColor.g = Output RGBColor.b = 1.0;
Output.RGBColor.a= 1.0;
return Output;
圖8示出了根據(jù)本發(fā)明一些實施方式的實例系統(tǒng)800。系統(tǒng)500可以包 括具有兩個或更多個處理內(nèi)核803的主處理器802、圖形處理器804、存儲 器806和808 (例如動態(tài)隨機(jī)存取存儲器(DRAM)、靜態(tài)隨機(jī)存取存儲器 (SRAM)、非易失性存儲器等)、總線或通信通路810,網(wǎng)絡(luò)接口814 (例 如有線和/或無線局域網(wǎng)(LAN)和/或廣域網(wǎng)(WAN)和/或個域網(wǎng)(PAN), 和/或其它有線和/或無線網(wǎng)絡(luò)接口)、以及顯示處理器和/或控制器816。系統(tǒng)800還可以包括天線815 (例如偶極天線,窄帶曲折線型天線(MLA), 寬帶MLA,倒"F"型天線,平面倒"F"型天線,Goubau天線,貼片天 線(Patch antenna)等),其耦合到網(wǎng)絡(luò)接口 814。系統(tǒng)800可以是適合于處 理3D圖形數(shù)據(jù)并以光柵化形式提供該數(shù)據(jù)的任何系統(tǒng),光柵化形式的數(shù)據(jù) 適合于在顯示裝置(未示出)上的呈現(xiàn),列舉幾個實例,所述顯示裝置例 如為液晶顯示器(LCD)、或陰極射線管(CRT)顯示器。
系統(tǒng)800可以采取多種物理實現(xiàn)方式。例如,系統(tǒng)800可以在個人計 算機(jī)(PC)、聯(lián)網(wǎng)的PC、服務(wù)器計算系統(tǒng)、手持計算平臺(例如個人數(shù)字 助理(PDA))、游戲系統(tǒng)(便攜式的或其它形式的),3D蜂窩電話手機(jī)等 中實現(xiàn)。而且,盡管可以在單個裝置中實現(xiàn)系統(tǒng)800的所有組件,例如芯 片上系統(tǒng)(SOC)集成電路(IC),但系統(tǒng)800的組件也可以分布在多個IC 或裝置中。例如,可以將主處理器802連同組件806和814實現(xiàn)為包含在 單個PC內(nèi)的多個IC,而圖形處理器804及組件808和816可以在一個分 離的裝置中實現(xiàn),例如通過通信通路810耦合到主處理器802及組件806 和814上的電視機(jī)或其它顯示器。
主處理器802可以包括專用或通用處理器,其包括能夠為圖形處理器 504提供3D圖形數(shù)據(jù)和/或指令的任何控制和/或處理邏輯、硬件、軟件和/ 或固件。處理器802可以執(zhí)行各種3D圖形計算,例如3D坐標(biāo)變換等,其 結(jié)果可以通過總線810提供給圖形處理器804,和/或可以存儲在存儲器806 和/或808中用于由處理器804最終使用。在本發(fā)明的一些實施方式中,主 處理器802可以是中央處理單元(CPU)。
在一個實施方式中,主處理器802能夠執(zhí)行支持或?qū)崿F(xiàn)使用立方體圖 的實時的、多分辨率的3D沖突檢測的任何數(shù)量的任務(wù)。支持的任務(wù)例如可 以包括向圖形處理器804提供3D圖形數(shù)據(jù);在存儲器808中設(shè)置一個或 多個紋理圖,例如立方體圖;將微代碼(經(jīng)由天線815和接口 814)下載到 處理器804;初始化和/或配置處理器804中的寄存器;中斷服務(wù);以及提
供總線接口,用于上載和/或下載3D圖形數(shù)據(jù),盡管本發(fā)明并不限于這一 點。在可替換的實施方式中,可以由圖形處理器804執(zhí)行這些功能中的一 些或全部。盡管圖5將主處理器802和圖形處理器804顯示為不同組件, 但本發(fā)明不限于這一點,本領(lǐng)域技術(shù)人員會認(rèn)識到,除了系統(tǒng)800的其它
19組件之外,處理器802和804也可以在單一 IC內(nèi)實現(xiàn)。
根據(jù)本發(fā)明的一些實施方式,每一個內(nèi)核803都可以使用沖突檢測算 法102的不同實現(xiàn)針對不同多面體對并行地執(zhí)行處理過程200/300??商鎿Q 地,這種并行處理方案可以由圖形處理器804來實現(xiàn)。
圖形處理器804可以包括能夠處理圖形數(shù)據(jù)的任何處理邏輯、硬件、 軟件和/或固件。在一個實施方式中,圖形處理器804可以實現(xiàn)能夠根據(jù)一 個或多個標(biāo)準(zhǔn)化渲染應(yīng)用編程接口 (API)來處理圖形數(shù)據(jù)的3D圖形架構(gòu), 列舉幾個實例,所述標(biāo)準(zhǔn)化渲染應(yīng)用編程接口 (API)例如為OpenGL2.0 ("The OpenGL Graphics System: A Specification" (2.0版;2004年10月22 日))和DirectX9.()W(9.0c版;2004年8月8日),盡管本發(fā)明不限于這一點。 圖形處理器804可以處理由主處理器802提供的、保存或存儲在存儲器806 和/或808中的、和/或由系統(tǒng)800外部的源提供并通過總線810從接口 814 獲得的3D圖形數(shù)據(jù)。
圖形處理器804可以接收3D場景數(shù)據(jù)形式的3D圖形數(shù)據(jù),并處理該 數(shù)據(jù),以便以合適的形式提供圖像數(shù)據(jù),該形式適于由顯示處理器816轉(zhuǎn) 換為顯示器專用數(shù)據(jù)。另外,除了類似于紋理采樣器104的一個或多個紋 理采樣器之外,圖形處理器804還可以實現(xiàn)多種3D圖形處理組件和/或級 (未示出),例如光柵化器級。由圖形處理器804實現(xiàn)的紋理采樣器可以讀 取或訪問在存儲器806和808的任意一個或二者中以立方體圖形式存儲或 保存的紋理數(shù)據(jù)。此外,根據(jù)本發(fā)明的一些實施方式,圖形處理器804可 以實現(xiàn)能夠使用存儲在一個或多個立方體圖中的距離值來以并行方式對多 對多面體進(jìn)行沖突檢測的兩個或更多個紋理采樣器。
總線或通信通路810可以包括用于在系統(tǒng)800的任意元件之間傳送信 息(例如圖形數(shù)據(jù)、指令等)的任何機(jī)制。例如,通信通路810可以包括 能夠在處理器802與處理器804之間傳送例如指令(例如宏代碼)的多用 途總線,盡管本發(fā)明不限于這一點。可替換地,通路810可以包括無線通 信通路。
顯示處理器816可以包括能夠?qū)⒂蓤D形處理器804提供的光柵化圖像 數(shù)據(jù)轉(zhuǎn)換為適于驅(qū)動顯示器的格式(即顯示器專用數(shù)據(jù))的任何處理邏輯、 硬件、軟件和/或固件。例如,處理器804可以將圖像數(shù)據(jù)以特定顏色數(shù)據(jù)格式提供給處理器816,例如以壓縮的紅-綠-藍(lán)(RGB)格式,并且處理器 816可以通過產(chǎn)生例如相應(yīng)的LCD驅(qū)動數(shù)據(jù)級等來處理此類RGB數(shù)據(jù),盡 管本發(fā)明并不限于這一點。盡管圖8將處理器804和816顯示為不同的組 件,但本發(fā)明不并限于這一點,本領(lǐng)域技術(shù)人員會認(rèn)識到,例如顯示處理 器816的一部分功能或全部功能可以由圖形處理器804和/或主處理器802 來執(zhí)行。
因此,通過利用硬件圖元,例如立方體圖,根據(jù)本發(fā)明的沖突檢測算 法可以完全在圖形處理器(例如處理器804)上執(zhí)行,該情況(有可能)排 除了處理過程300的預(yù)處理,處理過程300的預(yù)處理可以對每一個多面體 執(zhí)行一次并且可以在處理過程200之前進(jìn)行。此外,根據(jù)本發(fā)明的沖突檢 測算法能夠平衡(leverage)高級八叉樹結(jié)構(gòu),以使得對象-對象檢測最小化, 并且對于由八叉樹數(shù)據(jù)結(jié)構(gòu)確認(rèn)為候選的對象-對象交互,可以依賴于立方 體圖。因此,通過將沖突檢測算法移到圖形處理器(例如處理器804),可 以釋放CPU (例如主處理器802)來承擔(dān)其它任務(wù)。盡管如此,根據(jù)本發(fā) 明的沖突檢測算法也可以在CPU上執(zhí)行。而且,使用諸如立方體圖之類的 硬件圖元來檢測沖突會實現(xiàn)每一個沖突的數(shù)學(xué)運算的相當(dāng)大的減少(可能 多達(dá)三倍的減少),并且由于執(zhí)行完全獨立于沖突檢測測試這一能力,因此 能夠進(jìn)行多處理內(nèi)核實現(xiàn)(例如使用內(nèi)核803)。
盡管與所聲明的發(fā)明一致的一個或多個具體實例的在前說明提供了對 本發(fā)明的例證和說明,但是其意圖不是窮舉性的或?qū)⒈景l(fā)明的范圍限制為 所公開的具體實施方式
。明確而言,按照以上的教導(dǎo),可以有多種修改和 變化,或者可以從本發(fā)明的各種實施方式的實現(xiàn)中獲得多種修改和變化。 例如,盡管圖1和附屬的文字顯示并說明了耦合到單一紋理存儲器106的 單一紋理采樣器104,但本領(lǐng)域技術(shù)人員會認(rèn)識到,根據(jù)本發(fā)明的數(shù)據(jù)處理 器可以包括采用多個紋理采樣器的渲染引擎,每一個紋理采樣器都按照本 發(fā)明進(jìn)行操作,并耦合到一個或多個紋理存儲器。明確而言,可以使用許 多其它實施方式來提供根據(jù)本發(fā)明的使用立方體圖的實時的、多分辨率的 3D沖突檢測。
在本申請的說明中闡述的裝置、元件、動作、數(shù)據(jù)類型、指令等都不 應(yīng)解釋為對本發(fā)明是關(guān)鍵性或不可缺少的,除非明確表述為如此。此外,如在此所用的,冠詞"一"意圖包括一個或多個項。而且,當(dāng)在此或附帶 的權(quán)利要求中使用諸如"耦合的"或"響應(yīng)的"或"與……通信"之類的 術(shù)語或短語時,這些術(shù)語意圖是作最廣泛的理解。例如短語"耦合到"可 以指的是按照對于使用該短語的上下文適當(dāng)?shù)姆绞娇赏ㄐ诺?、電氣地、? 或可操作地進(jìn)行耦合。在實質(zhì)上不脫離本發(fā)明的精神和原理的情況下,可 以對所聲明的發(fā)明的上述實施方式做出多種改變和修改。所有此類修改和 改變都意圖在此包括在本公開內(nèi)容的范圍內(nèi),并受到附帶的權(quán)利要求的保 護(hù)。
權(quán)利要求
1、一種方法,包括接收第一多面體;接收第二多面體;及使用存儲在存儲器中的紋理圖來檢測在所述第一多面體和所述第二多面體之間的沖突。
2、 如權(quán)利要求l所述的方法,其中,所述紋理圖包括立方體圖,其存儲在所述第一多面體的原點與所述第一多面體的所有面之間的距離。
3、 如權(quán)利要求2所述的方法,其中,所述第一多面體的所述原點是所述第一多面體的包圍球的質(zhì)心或所述第一多面體的外心兩者中的一個。
4、 如權(quán)利要求2所述的方法,其中,使用所述紋理圖來檢測在所述第一多面體和所述第二多面體之間的沖突的步驟包括確定第一距離,該第一距離對應(yīng)于從所述原點到所述第二多面體的頂點的距離,所述第一多面體的所述原點與所述第二多面體的所述頂點定義了方向向量;通過使用對所述立方體圖的紋理地址的查詢,沿著所述方向向量確定第二距離,該第二距離對應(yīng)于從所述第一多面體的所述原點到所述第一多面體的面的距離;及比較所述第一距離與所述第二距離。
5、 如權(quán)利要求4所述的方法,其中,比較所述第一距離與所述第二距離的步驟包括比較所述第一距離的平方與所述第二距離的平方。
6、 如權(quán)利要求4所述的方法,還包括如果所述第二距離大于或等于所述第一距離,則在所述第一多面體和所述第二多面體之間檢測到?jīng)_突。
7、 如權(quán)利要求l所述的方法,還包括借助于以下步驟來產(chǎn)生所述紋理圖確定所述第一多面體的質(zhì)心;確定從所述質(zhì)心到所述第一多面體的所有面的多個距離,其中,沿著多個向量中的相應(yīng)向量確定所述多個距離中的每一個距離,所述多個向量中的每一個向量都從所述質(zhì)心開始并穿過所述紋理圖的相應(yīng)元素;及將所述多個距離中的每一個距離存儲為所述紋理圖中所述相應(yīng)元素的值。
8、 一種產(chǎn)品,包括機(jī)器可訪問介質(zhì),具有存儲在其上的指令,該指令當(dāng)由機(jī)器執(zhí)行時,使得所述機(jī)器接收第一多面體;接收第二多面體;及使用存儲在存儲器中的紋理圖來檢測在所述第一多面體和所述第二多面體之間的沖突。
9、 如權(quán)利要求8所述的產(chǎn)品,其中,所述紋理圖包括立方體圖,其存儲在所述第一多面體的原點與所述第一多面體的所有面之間的距離。
10、 如權(quán)利要求8所述的產(chǎn)品,其中,所述第一多面體的所述原點是所述第一多面體的包圍球的質(zhì)心或所述第一多面體的外心兩者中的一個。
11、 如權(quán)利要求8所述的產(chǎn)品,其中,用于使用所述紋理圖來檢測在所述第一多面體和所述第二多面體之間的沖突的所述指令當(dāng)由機(jī)器執(zhí)行時,使得所述機(jī)器確定第一距離,該第一距離對應(yīng)于從所述原點到所述第二多面體的頂點的距離,所述第一多面體的所述原點與所述第二多面體的所述頂點定義了方向向量;通過使用對所述立方體圖的紋理地址的查詢,沿著所述方向向量確定第二距離,該第二距離對應(yīng)于從所述第一多面體的所述原點到所述第一多面體的面的距離;及比較所述第一距離與所述第二距離。
12、 如權(quán)利要求ll所述的產(chǎn)品,還包括存儲在其上的指令,該指令當(dāng)由機(jī)器執(zhí)行時,使得所述機(jī)器如果所述第二距離大于或等于所述第一距離,則在所述第一多面體和所述第二多面體之間檢測到?jīng)_突。
13、 如權(quán)利要求8所述的產(chǎn)品,還包括存儲在其上的指令,該指令當(dāng)由機(jī)器執(zhí)行時,使得所述機(jī)器借助于以下步驟來產(chǎn)生所述紋理圖確定所述第一多面體的質(zhì)心;確定從所述質(zhì)心到所述第一多面體的所有面的多個距離,其中,沿著多個向量中的相應(yīng)向量確定所述多個距離中的每一個距離,所述多個向量中的每一個向量都從所述質(zhì)心開始并穿過所述紋理圖的相應(yīng)元素;及將所述多個距離中的每一個距離存儲為所述紋理圖中所述相應(yīng)元素的值。
14、 一種裝置,包括存儲器,其存儲紋理圖,所述紋理圖包括存儲距離值的像素;紋理采樣邏輯,其接收一個或多個查詢索引,所述一個或多個査詢索引由沖突檢測算法確定,所述查詢索引指定所述紋理圖的像素,所述紋理采樣邏輯根據(jù)所述一個或多個查詢索引而獲得所述距離值。
15、 如權(quán)利要求14所述的裝置,其中,所述距離值包括在第一多面體的原點與所述第一多面體的面之間的距離。
16、 如權(quán)利要求15所述的裝置,其中,所述紋理圖是立方體圖,并且其中,所述沖突檢測算法通過確定從所述第一多面體的原點到第二多面體的頂點的方向向量來確定所述一個或多個查詢索引,所述方向向量指定了 所述立方體圖的坐標(biāo)對,所述一個或多個查詢索引指定了 一個或多個立方 體圖像素的紋理坐標(biāo),該一個或多個立方體圖像素圍繞由所述方向向量指 定的所述立方體圖的所述坐標(biāo)對。
17、 如權(quán)利要求14所述的裝置,其中,所述存儲器包括以下之一動 態(tài)隨機(jī)存取存儲器(DRAM)、靜態(tài)隨機(jī)存取存儲器(SRAM)、或非易失性 存儲器。
18、 如權(quán)利要求14所述的裝置,還包括天線,用于接收所述沖突檢測 算法。
19、 如權(quán)利要求18所述的裝置,其中,所述天線包括以下之一偶極 天線、窄帶曲折線型天線(MLA)、寬帶MLA、倒"F"型天線、平面倒"F" 型天線、Goubau天線、或貼片天線。
全文摘要
公開了使用立方體圖進(jìn)行實時的、多分辨率的3D沖突檢測的裝置、系統(tǒng)和方法。例如,公開了一種方法,包括接收第一多面體;接收第二多面體,隨后使用存儲在存儲器中的紋理圖檢測在第一和第二多面體之間的沖突。還公開了其它實施方式。
文檔編號G06T15/00GK101496067SQ200780027890
公開日2009年7月29日 申請日期2007年7月12日 優(yōu)先權(quán)日2006年7月28日
發(fā)明者A·T·萊克, R·P·薩特 申請人:英特爾公司