專(zhuān)利名稱(chēng):采用多圖形處理器加速方格片元過(guò)濾的實(shí)時(shí)體繪制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及大型與精細(xì)數(shù)據(jù)集的可視圖像處理。對(duì)本發(fā)明的需求來(lái)自于美國(guó)可視人數(shù)據(jù)(Visible Human Dataset)的產(chǎn)生及其應(yīng)用有關(guān)的可視人研究(Visible Human Research)計(jì)劃,該計(jì)劃在多個(gè)國(guó)家已經(jīng)開(kāi)展了十多年。雖然本發(fā)明涉及計(jì)算機(jī)輔助醫(yī)學(xué)及醫(yī)學(xué)教育的特別應(yīng)用,但本發(fā)明并非只局限于醫(yī)學(xué)用途。本發(fā)明特別地涉及數(shù)據(jù)的體繪制。更具體地,本發(fā)明尤其涉及體繪制中的三維紋理映射化軸對(duì)齊面片(slice)的體繪制。
背景技術(shù):
體繪制(volume rendering)是一種直接繪制三維標(biāo)量樣本的方法,它并不需要先把樣本轉(zhuǎn)化成幾何基元(geometric primitives)。常用的體繪制的方法包括光線(xiàn)追跡(ray-casting),濾波點(diǎn)繪制(volume splatting)及三維紋理映射(3D texture mapping)。
幾何基元指以多邊形方式代表點(diǎn)、線(xiàn)或面。面的多邊形代表方式尤以三角形面片網(wǎng)或非均勻有理B樣條(NURBS)最為普遍。
光線(xiàn)追跡是其中一種直接體繪制技術(shù),它是通過(guò)由視點(diǎn)向屏幕的各個(gè)像素發(fā)出一條虛擬光線(xiàn)并沿光所經(jīng)路線(xiàn)累積樣本值。
濾波點(diǎn)繪制是一種利用高解像度局部拼貼橢圓形高斯盤(pán)(Gaussiandisk)以非線(xiàn)性方式紋理映像一個(gè)區(qū)域的技術(shù)。由于此方法需要對(duì)每個(gè)三角面片進(jìn)行多次繪制以將紋理合并到幀緩沖器(frame buffer)上,所以濾波點(diǎn)繪制對(duì)圖像處理器(GPU)的需求非常龐大。它需要高速的三角面片及填充比率。
圖1A及1B示出了兩種不同三維紋理映射的實(shí)施方法。三維紋理映像是另一種直接體繪制技術(shù),它通過(guò)圖像顯示卡的三維紋理內(nèi)存利用混合(blending)方式繪制。圖1A顯示的采用三維紋理映射的視平面對(duì)齊式面片疊,圖1B顯示的是采用三維紋理映射的軸對(duì)齊式面片疊。
三維紋理映像的整體工作流程如下先由原始數(shù)據(jù)集提取靜態(tài)信號(hào);經(jīng)過(guò)不同的紋理閾值處理后,初始化數(shù)據(jù)集的三維像素;根據(jù)可視區(qū)域?qū)⒓y理映像的幾何基元光柵化(rasterize)為方格片元(blocks offragments)。每一個(gè)這樣的片元內(nèi)包含了頂點(diǎn)及紋理信息。最后方格片元由一般圖形處理流水線(xiàn)(pipeline)處理。
整個(gè)處理過(guò)程分成三個(gè)階段頂點(diǎn)處理(Vertex Processing),光柵化(Rasterization)及片元處理(Fragment Processing)。
1)頂點(diǎn)處理頂點(diǎn)處理的目的在于對(duì)整個(gè)體繪制中根據(jù)數(shù)據(jù)集信息構(gòu)建出的點(diǎn)進(jìn)行處理。該處理過(guò)程包括對(duì)數(shù)據(jù)集的放大縮小、旋轉(zhuǎn)、平移、記錄輸出點(diǎn)在空間的位置及紋理坐標(biāo)以及產(chǎn)生顏色信息。在靜態(tài)的數(shù)據(jù)集繪制中繪制一個(gè)512×512×512的體數(shù)據(jù)集,繪制一個(gè)方向,每個(gè)面所需要的點(diǎn)是4個(gè),因此512層就需有2048個(gè)點(diǎn)。
2)光柵化光柵化的目的是把幾何基元(如三角面片)形轉(zhuǎn)換成很多如對(duì)角方陣般的片元(如圖2所示)。每一個(gè)片元都包含了深度、顏色和紋理坐標(biāo)信息。完成對(duì)體數(shù)據(jù)集的初始化后,體信息將由很多面片疊加繪制而成。每一層面通過(guò)光柵化處理生成大量片元。例如,如果使用正投影(orthographic projection),并且每一個(gè)面產(chǎn)生的片元是512×512×512,則整個(gè)數(shù)據(jù)集將生成134,217,728個(gè)片元,這對(duì)體繪制資源來(lái)說(shuō)是一個(gè)很大的數(shù)值。
3)片元處理片元處理的目的是在數(shù)據(jù)集的繪制中把紋理的顏色賦予每一個(gè)片元,由于紋理由離散的紋理單元組成,因此,將紋理映像到片元時(shí)必須要進(jìn)行額外處理,例如插值處理。此外,當(dāng)紋理單元的邊界落在片元的邊界上時(shí),就要對(duì)用到的紋理做加權(quán)處理。由于上述的計(jì)算,紋理映射的計(jì)算量是非常多的。
一般靜態(tài)三維體繪制的基本原理是通過(guò)累積一疊紋理面片上的體像素值以將圖像繪制在二維屏幕上。它的好處包括易于實(shí)施及易于與現(xiàn)有的圖形管道技術(shù)融合。以O(shè)penGL的三維紋理處理內(nèi)核作為例子,用戶(hù)只須從信息中初始化體紋理并初始化疊面片頂點(diǎn),其余的工作均可交由OpenGL的繪制流水線(xiàn)去處理。
圖3簡(jiǎn)述了一般靜態(tài)三維體繪制系統(tǒng)10的工作流程。它包括將體數(shù)據(jù)100分成體頂點(diǎn)信息102及體紋理信息104,在頂點(diǎn)處理器106中處理體頂點(diǎn)信息從而獲得頂點(diǎn)變換107,然后在基元匯編處理器108處理頂點(diǎn)變換107從而進(jìn)行基元匯編109。運(yùn)用光柵及插值處理器110對(duì)基元匯編109進(jìn)行光柵化111,然后將結(jié)果與體紋理信息104在片元處理器112中合并處理。最后片元在幀緩沖器116中拼合出紋理輸出118。這方法的缺點(diǎn)是需要將從體像素中導(dǎo)出的大量無(wú)可視用途的信息傳送至繪制流水線(xiàn)從而導(dǎo)致了硬件資源使用的低效率。
為了保證數(shù)據(jù)集的完整性,靜態(tài)數(shù)據(jù)一般給以保留。在數(shù)據(jù)預(yù)處理階段,通過(guò)對(duì)數(shù)據(jù)集每一層的圖像進(jìn)行檢測(cè)分析,發(fā)現(xiàn)至少有10%以上的靜態(tài)無(wú)可視用途的信息。此外,在繪制中對(duì)數(shù)據(jù)集的閾值操作或其它像素操作,也會(huì)產(chǎn)生靜態(tài)無(wú)可視用途的信息。一般來(lái)說(shuō),這些無(wú)可視用途信息的特征是其在繪制時(shí)透明度(Alpha)為零,即全透明。因此,保留這些無(wú)可視用途信息的像素會(huì)大大降低繪制性能。
對(duì)整體而言,由于數(shù)據(jù)集的實(shí)時(shí)旋轉(zhuǎn)平移,層與層之間的遮擋效應(yīng)與可見(jiàn)面之間的關(guān)系,會(huì)產(chǎn)生大量的動(dòng)態(tài)無(wú)可視用途的信息。對(duì)于動(dòng)態(tài)無(wú)可視用途的信息而言,其特征是在數(shù)據(jù)集實(shí)時(shí)繪制時(shí)它們是不可見(jiàn)的。通常的解決方法是在靜態(tài)的數(shù)據(jù)集旋轉(zhuǎn)平移時(shí)人為的降低數(shù)據(jù)集繪制的層數(shù),以保證能順利的旋轉(zhuǎn)平移數(shù)據(jù)集,但卻影響了數(shù)據(jù)集的處理性能。
其中一個(gè)降低體繪制效能的主要原因是面片在光柵化階段產(chǎn)生了大量的片元,每一個(gè)片元需要映像紋理與很多復(fù)雜的計(jì)算,從而消耗了大量的硬件資源。所以既要性能好并有更好細(xì)節(jié)還要能繪制更大的體數(shù)據(jù),這對(duì)用于傳統(tǒng)消費(fèi)級(jí)個(gè)人計(jì)算機(jī)的靜態(tài)數(shù)據(jù)集繪制而言是非常困難的。
因此,需要有一種可用于傳統(tǒng)消費(fèi)級(jí)個(gè)人計(jì)算機(jī)的靜態(tài)數(shù)據(jù)集繪制方法及系統(tǒng)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明,它提供了一種用于個(gè)人計(jì)算機(jī)平臺(tái)的交互式體繪制計(jì)算機(jī)方法及系統(tǒng)。通過(guò)新提出的硬件加速方格過(guò)濾法,能有效地優(yōu)化圖形處理資源的應(yīng)用。本方法是基于三維軸對(duì)齊面片。通過(guò)選擇性地傳送體像素/片元方格,片元處理的負(fù)擔(dān)可通過(guò)一個(gè)過(guò)濾過(guò)程得以降低。
根據(jù)本發(fā)明,整個(gè)體繪制重建包括以下幾個(gè)步驟對(duì)面片進(jìn)行處理以清除噪聲信息;從所述經(jīng)過(guò)處理的面片重組三維紋理映像;通過(guò)頂點(diǎn)處理器進(jìn)行相關(guān)變換;將面片分割成方格網(wǎng),每個(gè)方格均包含相關(guān)深度及紋理坐標(biāo)信息;進(jìn)行一個(gè)兩階段式繪制過(guò)程來(lái)處理方格,所述兩階段包括虛擬繪制階段及主繪制階段;以及通過(guò)片元處理器投影經(jīng)過(guò)紋理化的方格從而繪制出最后圖像。方格過(guò)濾分成靜態(tài)方格過(guò)濾及動(dòng)態(tài)方格過(guò)濾。靜態(tài)方格過(guò)濾通過(guò)處理傳遞至光柵過(guò)程的靜態(tài)無(wú)可視用途信息來(lái)減少信息。動(dòng)態(tài)方格過(guò)濾則處理被阻擋的方格。方格過(guò)濾使用常規(guī)計(jì)算機(jī)圖像處理器的頂點(diǎn)著色器及像素著色器,這些著色器是圖像流水線(xiàn)中的可編程的點(diǎn),包括頂點(diǎn)處理和片元處理。該方法可以以多線(xiàn)程及多圖像處理器的方式進(jìn)行。
本發(fā)明的上述及其它目的、特征和優(yōu)點(diǎn),通過(guò)參照附圖詳細(xì)說(shuō)明下面幾個(gè)實(shí)例將會(huì)更加清楚。
附圖簡(jiǎn)單說(shuō)明圖1A及1B是表示現(xiàn)有技術(shù)的兩種不同的三維紋理映射實(shí)施方法的圖解圖;圖2是表示現(xiàn)有技術(shù)的光柵化方陣的框圖;圖3是表示現(xiàn)有技術(shù)的靜態(tài)體繪制流水線(xiàn)的流程圖;圖4A是表示本發(fā)明繪制流水線(xiàn)的流程圖;圖4B是表示本發(fā)明操作系統(tǒng)的流程圖;圖4C是詳細(xì)表示本發(fā)明圖像處理引擎的流程圖;圖5是表示整體體繪制流水線(xiàn)過(guò)程的流程圖;圖6是表示本發(fā)明實(shí)施的流程圖;圖7是表示軸對(duì)齊分組的分割與細(xì)分的圖解圖;圖8是表示虛擬體繪制的流程圖;圖9是表示項(xiàng)目緩沖繪制的圖解圖;圖10是表示虛擬繪制不同成分的圖解圖;
圖11A及11B是表示主繪制及虛擬繪制的圖解圖;圖12是表示主繪制的流程圖;圖13是表示方格削減過(guò)程的圖解圖;圖14是表示靜態(tài)方格過(guò)濾的成果圖解圖;圖15A及15B是表示犁溝效果的圖解圖;圖16是表示方格掩蔽過(guò)程的圖解圖。
具體實(shí)施例方式
根據(jù)本發(fā)明,可以通過(guò)選擇性地傳送體像素/片元方格到不同的處理器以降低繪制流水線(xiàn)中片元處理的負(fù)擔(dān)。本發(fā)明的方法以方格式片元取代分離式的片元批量處理,這種選擇性片元處理稱(chēng)之為方格片元過(guò)濾法。
圖4A示出了一個(gè)基于本發(fā)明的體繪制流水線(xiàn)的流程圖20,從該圖中可以明顯看出本發(fā)明與常規(guī)的工作流程10(圖3)的區(qū)別。采用這種流程的目的是為了減少被傳送到頂點(diǎn)處理器106及片元處理器113的片元數(shù)量。如圖4A所示,體數(shù)據(jù)集100被分成體頂點(diǎn)成分102、體紋理成分104及動(dòng)態(tài)體紋理成分105。體頂點(diǎn)102轉(zhuǎn)化成動(dòng)態(tài)頂點(diǎn)103,其結(jié)果將與動(dòng)態(tài)體紋理成分105一同被傳送至頂點(diǎn)處理器106。改良過(guò)的片元處理器113接收經(jīng)光柵化及插值處理后的信息110。動(dòng)態(tài)體紋理105及原始體紋理104再一起輸入至片元處理器113。如前所述,本發(fā)明所提出的方法及操作系統(tǒng)除了能提升繪制效率,還能有效地解決硬件存儲(chǔ)上限的問(wèn)題。本方法的目的在于減少對(duì)不可見(jiàn)片元的處理。因此,本發(fā)明提供一個(gè)動(dòng)態(tài)的體繪制。此外,本發(fā)明的方法可以應(yīng)用于多個(gè)圖形處理器中。根據(jù)在個(gè)人計(jì)算機(jī)中擁有的圖形處理器數(shù)目,多個(gè)線(xiàn)程可以被分配至這些圖形處理器中進(jìn)行對(duì)體數(shù)據(jù)集的繪制。本發(fā)明的片元過(guò)濾令在傳統(tǒng)消費(fèi)級(jí)個(gè)人計(jì)算機(jī)上繪制大型數(shù)據(jù)集變得可能。
圖4B是概括本發(fā)明操作系統(tǒng)的框圖。本系統(tǒng)建立于常規(guī)個(gè)人計(jì)算機(jī)30之上,該系統(tǒng)包括顯示器31、中央處理器32、系統(tǒng)內(nèi)存120、置于主槽123并連接紋理內(nèi)存121的主圖形處理器122、多個(gè)外置于副槽34,36,38并連接主槽123及紋理內(nèi)存226,228,230的圖形處理器126,128,130、大容量存儲(chǔ)器40、用于讀取一疊紋理面片至系統(tǒng)內(nèi)存120以作預(yù)處理的面片讀取器42、以及用戶(hù)接口44,該用戶(hù)接口44用于接收用戶(hù)控制,如位移、旋轉(zhuǎn)、放大縮小及設(shè)定體數(shù)據(jù)集剪取面。
圖4C是概括本發(fā)明的圖像處理引擎46的方塊流程圖。圖像處理引擎46是附加于個(gè)人計(jì)算機(jī)并用于大量數(shù)據(jù)集交互式體繪制的工具,處理后的圖像最終會(huì)被傳送至個(gè)人計(jì)算機(jī)30的顯示器31。該個(gè)人計(jì)算機(jī)30配備有多個(gè)圖形處理器122,126,128,130。圖像處理引擎46包括用于移除原始面片噪音信息的預(yù)處理器50、用于將體數(shù)據(jù)(由二維面片組成)重組成三維紋理圖像的體數(shù)據(jù)重組器52、用于把三維紋理圖像分成三個(gè)軸對(duì)齊紋理面片疊的分割器54、用于把圖像紋理長(zhǎng)寬調(diào)整至二乘冪的大小調(diào)整器56、用于將二維面片細(xì)分為較細(xì)方格網(wǎng)的細(xì)分器58、用于接收及響應(yīng)對(duì)體數(shù)據(jù)顯示的交互式輸入的用戶(hù)接口44、用于實(shí)施變換(至少包括位移、旋轉(zhuǎn)或大小調(diào)整)的處理引擎60以及用于對(duì)方格執(zhí)行兩階段式繪制處理的繪制引擎62。本發(fā)明的繪制處理包括一個(gè)運(yùn)算與視圖相關(guān)的(view-dependent)無(wú)可視用途方格的虛擬繪制階段以及一個(gè)過(guò)濾方格的主繪制階段。本發(fā)明的方格片元過(guò)濾器64用以將處理后的方格轉(zhuǎn)化成最后可視圖像。
A.基本前提本發(fā)明主要基于兩個(gè)前提。第一個(gè)基本前提是常規(guī)體繪制的處理傾向于浪費(fèi)大量片元。因此,本發(fā)明提出了一個(gè)自定的體繪制流水線(xiàn)用以濾除不必要的片元。第二個(gè)基本前提是利用多個(gè)圖像處理器能提供一個(gè)更有效的體繪制過(guò)程?;诒景l(fā)明,體繪制的不同階段通過(guò)一個(gè)多線(xiàn)程策略分配給多個(gè)圖像處理器。
B.自定體繪制流水線(xiàn)根據(jù)本發(fā)明所述,它提供了一種利用一般計(jì)算機(jī)硬件加速方格過(guò)濾法并用于大型數(shù)據(jù)交互式體繪制的系統(tǒng)及計(jì)算機(jī)方案。該方案是基于三維紋理軸對(duì)齊面片繪制。本發(fā)明的體繪制過(guò)程包括以下幾個(gè)步驟為面片作噪聲信號(hào)清除處理;從面片重組三維紋理映像;通過(guò)頂點(diǎn)處理器進(jìn)行相關(guān)變換;將面片細(xì)分成方格網(wǎng),每個(gè)方格均包含相關(guān)的深度及紋理坐標(biāo)信息;通過(guò)兩階段的繪制過(guò)程來(lái)處理方格,這兩個(gè)階段包括虛擬繪制階段和主繪制階段;每個(gè)面片細(xì)分成包含對(duì)應(yīng)深度及紋理坐標(biāo)數(shù)據(jù)的方格片元,通過(guò)片元處理器繪制最后圖像。
圖5示出了繪制程序的概況。如圖5所示,其中含有一個(gè)主繪制階段A及一個(gè)虛擬繪制階段B,這兩個(gè)階段以不同的線(xiàn)程執(zhí)行。虛擬繪制階段B的目的是通過(guò)一個(gè)改良過(guò)的項(xiàng)目緩沖繪制來(lái)計(jì)算可視性信息??梢曅孕畔⒅冈谒龈牧歼^(guò)的項(xiàng)目緩沖中所繪制的項(xiàng),即虛擬繪制項(xiàng)目緩沖。而主繪制階段A則使用這些可視性數(shù)據(jù)對(duì)方格進(jìn)行過(guò)濾并繪制最終圖像。在主繪制階段A中,個(gè)人計(jì)算機(jī)系統(tǒng)內(nèi)存120提供信息至方格過(guò)濾及繪制程序C,并將方格過(guò)濾及繪制程序C的輸出存儲(chǔ)在紋理內(nèi)存121中以供圖形處理器122使用。在虛擬繪制階段B中,系統(tǒng)內(nèi)存120提供信息至項(xiàng)目緩沖繪制程序D,項(xiàng)目緩沖繪制程序D的輸出被送到用于支持圖形處理器126,128,130等的紋理內(nèi)存226,228,230。
根據(jù)圖6,主繪制階段A的方格過(guò)濾進(jìn)一步分成兩個(gè)階段靜態(tài)方格過(guò)濾E及動(dòng)態(tài)方格過(guò)濾F。靜態(tài)方格過(guò)濾E負(fù)責(zé)確定每個(gè)紋理面片(方格網(wǎng))中的所有無(wú)可視用途的信息。動(dòng)態(tài)方格過(guò)濾F負(fù)責(zé)選取因被阻擋而產(chǎn)生的無(wú)可視用途的信息,而阻擋的詳情是從虛擬繪制階段B中運(yùn)算出來(lái)的。本方法使用了個(gè)人計(jì)算機(jī)的典型圖形處理器的頂點(diǎn)著色器及像素著色器特點(diǎn),圖像硬件在虛擬繪制中被用來(lái)過(guò)濾所有無(wú)可視用途方格。圖6表示下列步驟的流程。經(jīng)過(guò)預(yù)處理(步驟H)(包括軸對(duì)齊疊的產(chǎn)生I以及方格細(xì)分J)后,靜態(tài)方格過(guò)濾E及項(xiàng)目緩沖繪制B將被并行地執(zhí)行。與此同時(shí),項(xiàng)目緩沖繪制B亦被分配成多個(gè)同時(shí)執(zhí)行的工作(這只是個(gè)別例子),而每個(gè)工作以單獨(dú)線(xiàn)程被分配至不同的圖像處理器上。
C.體數(shù)據(jù)處理本發(fā)明的任務(wù)涉及到了體數(shù)據(jù)集的處理過(guò)程,其中每一張面片都被細(xì)分為多個(gè)方格片元。為了方便計(jì)算,每一個(gè)方格的長(zhǎng)寬被設(shè)定為2n×2n,而n為一個(gè)正整數(shù)。每個(gè)方格(圖7中的元素338或340或342)都被附上一個(gè)索引以便將來(lái)參考之用。每個(gè)方格的頂點(diǎn)坐標(biāo)及相對(duì)應(yīng)的紋理坐標(biāo)也被儲(chǔ)存起來(lái)。為了保持面片與方格之間尺寸的一致性(圖14),假設(shè)a,b,c為三個(gè)正整數(shù),x-軸對(duì)齊的面片將被調(diào)整為2b×2c,y-軸對(duì)齊的面片將被調(diào)整為2a×2c,z-軸對(duì)齊的面片將被調(diào)整為2a×2b。設(shè)定方格尺寸的n符合比例k∶n,其中k是一個(gè)整數(shù),且k取a、b、c的最小值(k=min(a,b,c))。圖14描述了片元怎樣被調(diào)整。例如,假設(shè)原始數(shù)據(jù)集的大小是120×120×60,通過(guò)為x-軸設(shè)定a=7,為y-軸設(shè)定b=7,為z-軸設(shè)定c=6(在圖14中未標(biāo)注),那么該數(shù)據(jù)集的大小被調(diào)整為128×128×64。在這個(gè)例子中,k等于5,而n可以被設(shè)置為5或小于5的正整數(shù)。面片對(duì)方格的比例是根據(jù)硬件資源而改變的,這一點(diǎn)將在完整地描述整個(gè)程序之后再作討論。
圖7描述了三疊軸對(duì)齊面片是如何制造出來(lái)的(程序K)。對(duì)于每一個(gè)特定的數(shù)據(jù)集而言,整個(gè)處理只在繪制前執(zhí)行一次,所以并不會(huì)影響實(shí)時(shí)繪制的效能。不過(guò),方格的大小會(huì)影響后續(xù)的方格過(guò)濾。每個(gè)方格頂點(diǎn)坐標(biāo)及紋理坐標(biāo)都被記錄下來(lái)(以三維方格330代表)。因?yàn)轶w繪制是基于三維紋理映像軸對(duì)齊面片,所以需分別產(chǎn)生三個(gè)軸對(duì)齊面片疊332,334,336。如之前所提及的那樣,各邊緣的長(zhǎng)寬都被設(shè)定為二的乘冪數(shù)。一個(gè)三維紋理映像由原始的面片重組而成,此紋理映像被視為體像素的三維數(shù)組。利用三維紋理映像,其余兩個(gè)疊可以通過(guò)體像素線(xiàn)性插值法產(chǎn)生。因此,三個(gè)面片疊被單獨(dú)地分為多個(gè)方格,即最終的三組獨(dú)立的方格疊338,340,342。
D.虛擬體繪制階段虛擬體繪制階段(程序L)在最后繪制之前執(zhí)行。此階段的目的是為了預(yù)先運(yùn)算出可視性數(shù)據(jù),以使片元處理器利用這些數(shù)據(jù)過(guò)濾不可見(jiàn)(無(wú)可視用途)的方格片元。這階段可在單獨(dú)的線(xiàn)程中執(zhí)行,但它與主繪制線(xiàn)程共享同一內(nèi)存。
依據(jù)圖8,在繪制每一個(gè)幀之時(shí),根據(jù)體數(shù)據(jù)330的當(dāng)前相對(duì)位移及旋轉(zhuǎn)狀況,從三個(gè)軸對(duì)齊面片疊(圖7中的332,334,336)中決定選取其一,然后選擇頂點(diǎn)緩沖器442,并把頂點(diǎn)數(shù)據(jù)儲(chǔ)存于數(shù)組中。如有任何軸對(duì)齊或不規(guī)則式剪取面存在,它們也在繪制流水線(xiàn)中被設(shè)定,而融合后的紋理就好像常規(guī)繪制一樣被描繪在一個(gè)虛擬屏幕上。該虛擬屏幕上被繪制的項(xiàng)目代表了本幀的所有可視方格。
本發(fā)明提出了一個(gè)經(jīng)改良過(guò)的項(xiàng)目緩沖方法,該方法稱(chēng)之為方格緩沖法,它以顏色紋理438的方式來(lái)儲(chǔ)存每個(gè)方格的標(biāo)識(shí)。每個(gè)標(biāo)識(shí)由方格索引計(jì)算,并且包含了面片號(hào)碼以及方格的x坐標(biāo)和y坐標(biāo)。換句話(huà)說(shuō),各方格的標(biāo)識(shí)是根據(jù)一個(gè)笛卡兒Cartesian(X,Y,Z)項(xiàng)目,這個(gè)項(xiàng)目由(0,0,0)開(kāi)始。每個(gè)空間標(biāo)識(shí)被指定一個(gè)(R,G,B)項(xiàng),以用于虛擬繪制。
圖9示出了本發(fā)明的自定方格緩沖方法的概念。一般來(lái)說(shuō),一個(gè)圖像的應(yīng)用程序接口(API)提供兩種圖像儲(chǔ)存格式的選擇,十六位儲(chǔ)存及三十二位儲(chǔ)存。本發(fā)明以?xún)煞N不同方案處理這兩種圖像儲(chǔ)存格式。方格標(biāo)識(shí)依據(jù)圖像儲(chǔ)存格式分別以十六位或三十二位儲(chǔ)存。儲(chǔ)存格式不同,儲(chǔ)存的數(shù)據(jù)也不一樣。如果圖像儲(chǔ)存格式為十六位,則所有位都被分配用于保存顏色紋理,其分配方式為5-6-5。如果圖像儲(chǔ)存格式為三十二位,則二十四個(gè)位被分配用于保存顏色紋理,分配方式為8-8-8,余下的八個(gè)位則被用于儲(chǔ)存虛亮度。
圖10示出了三個(gè)虛擬繪制的組成部分顏色紋理438,透明度紋理440(如有)及頂點(diǎn)緩沖442。
圖11A及11B示出了一個(gè)虛擬繪制階段執(zhí)行的例子。圖11A表示一個(gè)真正繪制的例子,而圖11B則表示相對(duì)應(yīng)的虛擬繪制。虛擬屏幕緩沖儲(chǔ)存在屏幕上顯示的方格數(shù)據(jù),而虛擬繪制只在后臺(tái)進(jìn)行,并不需要真正把圖像繪制于屏幕上。換句話(huà)說(shuō),虛擬屏幕緩沖是永遠(yuǎn)不會(huì)在屏幕上出現(xiàn)。從虛擬緩沖中,把應(yīng)留下的方格的標(biāo)識(shí)拷貝到系統(tǒng)內(nèi)存上。這些方格標(biāo)識(shí)留待主繪制時(shí)使用。
在虛擬繪制階段中,本發(fā)明利用一個(gè)多圖形處理器方案去執(zhí)行,當(dāng)中使用了多個(gè)頂點(diǎn)著色器及片元著色器去并行地獲取可視性數(shù)據(jù)。更準(zhǔn)確說(shuō),個(gè)人計(jì)算機(jī)中的多個(gè)副圖像槽被用作并行運(yùn)算之用。副圖像槽的數(shù)目決定了共有多少個(gè)圖形處理器可用作虛擬繪制。假設(shè)有“p”個(gè)副圖像槽,每疊方格網(wǎng)將被分成“p”份。每一份方格網(wǎng)疊被設(shè)定只在單獨(dú)的虛擬屏幕繪制。當(dāng)所有面片的虛擬繪制完成后,各份的可視性數(shù)據(jù)將被融合來(lái),相對(duì)應(yīng)的方格標(biāo)識(shí)也被拷貝至系統(tǒng)內(nèi)存中以作動(dòng)態(tài)方格過(guò)濾之用。
E.主干體繪制階段主干體繪制階段負(fù)責(zé)過(guò)濾無(wú)可視用途的方格以及繪制最后圖像。方格過(guò)濾包括兩個(gè)步驟靜態(tài)方格過(guò)濾,它負(fù)責(zé)過(guò)濾視圖無(wú)關(guān)(view-independent)無(wú)可視用途方格;及動(dòng)態(tài)方格過(guò)濾,它負(fù)責(zé)過(guò)濾視圖相關(guān)(view-dependent)無(wú)可視用途方格。
圖12中示出了信息由體數(shù)據(jù)330到頂點(diǎn)緩沖(vertex buffer)232再到RGBA紋理234的可視性計(jì)算流程,所有結(jié)果都儲(chǔ)存于系統(tǒng)內(nèi)存120并轉(zhuǎn)送至圖形處理器(GPU)122。
1)靜態(tài)方格過(guò)濾數(shù)據(jù)集一般以二維圖像圖或三維體像素儲(chǔ)存。為了保持?jǐn)?shù)據(jù)的完整性,通常需要保存數(shù)據(jù)集中的靜態(tài)無(wú)可視用途信息。如圖13所示,面片252內(nèi)的灰色部分250的信息僅被保存用于保持?jǐn)?shù)據(jù)的完整性。還有實(shí)時(shí)繪制數(shù)據(jù)集的過(guò)程中閾值或者其它操作使體信息在顯示中為全透明的區(qū)域。圖13中,面片256的內(nèi)圍灰色區(qū)域254代表了在對(duì)數(shù)據(jù)集進(jìn)行閾值操作后產(chǎn)生的無(wú)可視用途信息區(qū)域。這些無(wú)可視用途的信息區(qū)域通過(guò)面片在圖像流水線(xiàn)的光柵化部分中的處理而產(chǎn)生大量無(wú)可視用途的片元,由于這些信息會(huì)產(chǎn)生大量無(wú)可視用途方格,并因而令片元處理器負(fù)荷過(guò)大,在傳送訊號(hào)到頂點(diǎn)處理器262之前,所有這類(lèi)訊號(hào)先被過(guò)濾掉以產(chǎn)生最終的頂點(diǎn)成分260。
參照?qǐng)D14,為了過(guò)濾無(wú)可視用途信息,首先從原始圖像中分辨出需要被移除的信息的RGBA形式的顏色項(xiàng)目記錄。這些顏色項(xiàng)目組成一個(gè)過(guò)濾集。此過(guò)濾集能包括多于一個(gè)顏色項(xiàng)目。對(duì)每一疊面片,方格261依據(jù)上述過(guò)濾集被過(guò)濾。如果一個(gè)方格內(nèi)只包含該過(guò)濾集的顏色項(xiàng)目,則該方格即被設(shè)定為“可被過(guò)濾”方格。這個(gè)過(guò)濾程序需要于三個(gè)軸對(duì)齊方格網(wǎng)各自執(zhí)行。舉例說(shuō),如一張?jiān)济嫫缺徽{(diào)整大小及被細(xì)分為64個(gè)方格。假設(shè)過(guò)濾集用以過(guò)濾所有黑色項(xiàng)目,則一些外圍黑色方格將會(huì)被設(shè)定為“可被過(guò)濾”方格。
一旦方格片元被過(guò)濾之后,余下的方格被稱(chēng)為靜態(tài)濾清方格(statically filtrated blocks)270。各個(gè)方格的索引將被記錄于一個(gè)列表中,列表以頂點(diǎn)數(shù)組的格式儲(chǔ)存。頂點(diǎn)坐標(biāo)及紋理坐標(biāo)也存于頂點(diǎn)數(shù)組中。
對(duì)于同一個(gè)面片上的方格,如它們是獨(dú)立繪制的,則在每一個(gè)方格的邊緣會(huì)出現(xiàn)一種犁溝現(xiàn)象(gutter-pattern effect)。出現(xiàn)這個(gè)現(xiàn)象是因?yàn)閮蓚€(gè)相鄰的方格會(huì)被投映到同一個(gè)像素中。為解決這個(gè)問(wèn)題,本發(fā)明利用了圖像卡的硬件加速特性。紋理擴(kuò)散(Texture clamping)被用來(lái)編輯來(lái)自同一個(gè)紋理面片的一個(gè)特定的方格集。利用這種方法,最后的屏幕圖像將會(huì)無(wú)犁溝現(xiàn)象。
2)動(dòng)態(tài)方格過(guò)濾在一個(gè)動(dòng)態(tài)方格過(guò)濾步驟中,將會(huì)過(guò)濾任何因進(jìn)行了平移、旋轉(zhuǎn)等操作而產(chǎn)生的動(dòng)態(tài)不可見(jiàn)方格。動(dòng)態(tài)的無(wú)可視用途信息區(qū)域是由于交互式顯示中因遮擋而產(chǎn)生的不可見(jiàn)區(qū)域。更準(zhǔn)確說(shuō),這些信息是處于用者設(shè)定的剪取面(clip-plane)或面片之間的遮擋區(qū)域。這部分的信息在常規(guī)靜態(tài)數(shù)據(jù)集繪制流水線(xiàn)中是不可以去掉的,因?yàn)檫@部分信息在深度測(cè)試中起到重要的作用。而這部分信息在動(dòng)態(tài)片元過(guò)濾實(shí)時(shí)體繪制中變成了無(wú)可視用途的信息。在動(dòng)態(tài)片元過(guò)濾實(shí)時(shí)體繪制中已經(jīng)不需要這些區(qū)域的深度信息了。在圖16中,面片的灰色區(qū)域272代表了被遮擋的部分,其都為無(wú)可視用途信息區(qū)域。而剩余的區(qū)域274沒(méi)有被其它層遮擋,該區(qū)域是待要保留的。這些動(dòng)態(tài)無(wú)可視用途信息將會(huì)利用從虛擬繪制階段所獲得的數(shù)據(jù)加以過(guò)濾。
依據(jù)當(dāng)前體數(shù)據(jù)集的實(shí)時(shí)旋轉(zhuǎn)平移狀況,選取相對(duì)的軸對(duì)齊面片疊。動(dòng)態(tài)方格過(guò)濾是基于由靜態(tài)方格過(guò)濾程序過(guò)濾出來(lái)的方格。
在虛擬繪制階段中,可視方格標(biāo)識(shí)被存于中央主存儲(chǔ)器中。這些數(shù)據(jù)被讀取,同時(shí)標(biāo)記應(yīng)被過(guò)濾的方格,余下的方格被留到下一個(gè)步驟。
識(shí)別了靜態(tài)及動(dòng)態(tài)無(wú)可視用途區(qū)域后,方格可被處理。經(jīng)靜態(tài)及動(dòng)態(tài)過(guò)濾后的方格,被用以繪制最后圖像。每一個(gè)面片,以當(dāng)中方格的深度數(shù)據(jù)作序列。方格最后被光柵化并傳送到片元處理器。
方格大小的選擇是依據(jù)現(xiàn)有的硬件資源。一般來(lái)說(shuō),較細(xì)小的方格能令過(guò)濾片元的效率更明顯。不過(guò),細(xì)小的方格卻同時(shí)意味將有更多的方格用于動(dòng)態(tài)方格過(guò)濾程序中的運(yùn)算。不同的硬件組合有不同的面片對(duì)方格比例。
本發(fā)明還實(shí)現(xiàn)了一個(gè)高素質(zhì)數(shù)據(jù)集交互式繪制系統(tǒng)。這系統(tǒng)包括一個(gè)面片讀取器及一個(gè)交互式繪制器。面片讀取器讀取一疊紋理面片以便預(yù)處理;繪制器實(shí)施硬件加速方格過(guò)濾法以提供交互式大型數(shù)據(jù)集繪制。一個(gè)使用者界面接受使用者控制位移、旋轉(zhuǎn)、大小調(diào)整或加入剪取面。根據(jù)使用者的輸入,系統(tǒng)會(huì)把所有數(shù)據(jù)傳送至繪制器中。
附錄A包括一個(gè)根據(jù)本發(fā)明特征編制的偽代碼用以列出一個(gè)適合用于常規(guī)個(gè)人計(jì)算機(jī)的計(jì)算機(jī)程序,此計(jì)算機(jī)程序可適用于一個(gè)或多個(gè)圖形處理器上。
本發(fā)明雖作了詳細(xì)說(shuō)明并圖示,但這僅僅是用作為圖解及一個(gè)例子而已,顯然不應(yīng)該被理解為是一種限定,本發(fā)明的精神以及范圍僅由權(quán)利要求書(shū)中的詞句所限定。
附錄A//////////////////*主線(xiàn)程*//////////////////Enter program event loop;/*獲得用戶(hù)輸入*/Grab mouse and keyboard input;if(not quitting program by user)Compute translation,rotation,scaling and plane-clipping based onmouse and keyboard input values;Obtain user-defined threshold operations;Compute transformation matrix of translation,rotation and scaling;/*將數(shù)據(jù)寫(xiě)入CPU緩存*/Lock CPU buffer;Write projection matrix into CPU buffer;Write transformation matrix into CPU buffer;Write clipping plane parameters into CPU buffer;Write threshold operations into CPU buffer;Unlock CPU buffer;Call PREPROCESSING procedure;Run Main Rendering Thread;p=the number of side graphics slot;Separate the grids of blocks into p sets;Distribute p Virtual Rendering threads into different graphicsprocessing units installed on side slot with different sets of grids;Wait for all Virtual Rendering threads to finish;Merge up all visibility information within the CPU buffer;Wake up Main Rendering Thread to perform dynamic block filtration;elseExit program event loop;end if;
////////////////////////*數(shù)據(jù)預(yù)處理*/////////////////////////*面片讀取*/Read volume data in terms of 2D slices into system memory;/*預(yù)處理(去除噪聲)*/for every slice in original image slicesremove noise from slice;/*重構(gòu)3D紋理映像*/Setup 3D texture mapping parameters;Generate and Load 3D texture map GPU buffer resided in tHe texture memory;/*產(chǎn)生軸對(duì)齊分組*/Lock GPU buffer;Copy 3D texture map from GPU buffer;Unlock GPU buffer;By applying tri-linear interpolation on the 3D texture mapConstruct a stack of X-axis-aligned 3D-textured slices;Construct a stack of Y-axis-aligned 3D-textured slices ;Construct a stack of Z-axis-aligned 3D-textured slices;/*重新調(diào)整面片的大小*/for every slices in the X-axis-aligned stackif(y-dimension of slice is not of power of 2)Enlarge y-dimension to(2 to the power of b)by clamping edge;end if;if(z-dimension of slice is not of power of 2)Enlarge z-dimension to(2 to the power of c)by clamping edge;end if;end for;for every slices in the Y-axis-aligned stackif(x-dimension of slice is not of power of 2)Enlarge x-dimension to(2 to the power of a)by clamping edge;end if;if(z-dimension of slice is not of power of 2)Enlarge z-dimension to(2 to the power of c)by clamping edge;end if;end for;for every slices in the z-axis-aligned stackif(y-dimension of slice is not of power of 2)Enlarge y-dimension to(2 to the power of b)by clamping edge;
end if;if(x-dimension of slice is not of power of 2)Enlarge x-dimension to(2 to the power of a)by clamping edge;end if;end for;/*面片細(xì)分*/select a positive integer n where kn is an integer and k=min(a,b,c);for every slices in the X-axis-aligned stackSubdivide slice into b/n times c/n blocks;for every slices in the Y-axis-aligned stackSubdivide slice into a/n times c/n blocks;for every slices in the Z-axis-aligned stackSubdivide slice into a/n times b/n blocks;Label a grid index for every block;Write vertex coordinates,and texture coordinates of blocks in a vertexarray;
///////////////////////////*主繪制線(xiàn)程*////////////////////////////*初始化數(shù)據(jù)*/Read information on grids of blocks;Initialize vertex shader and fragment shader;/*從CPU緩存中取出數(shù)據(jù)*/Lock CPU buffer;Read projection matrix into CPU buffer;Read transformation matrix from CPU buffer;Read clipping plane parameters from CPU buffer;Read any threshold operations from CPU buffer;Read visibility information in terms of visible block IDs from CPU buffer;Unlock CPU buffer;/*靜態(tài)方格過(guò)濾*/if(run first time or with changes in filter set)Setup/modify the filter set according to user-defined thresholdoperations;for each block in in all 3 axis-aligned grids of blocksif(any voxel value within the block not in filter set)set block as statically filtrated;elseset block as to-be-filtered;end if;end for;Write vertex and texture information of filtrated blocks into a 2Dvertex array;endif;Compute deviation of view vector and orientational status;Selecting corresponding axis-aligned stack according to the deviation;Wait for the virtual rendering thread to finish computation;/*動(dòng)態(tài)方格過(guò)濾*/if(run first time or with transformational changes)From the statically filtrated blocks,filter out non-viewable blocksbased on obtained visible block IDs;Mark up remaining blocks as final filtrate-blocks;endif;Sort filtrate-blocks in back-to-front order;
Write vertex coordinates and texture coordinates of filtrate-blocks intoa vertex array;/*最終繪制*/Set screen background as(0,0,0,0);Set up transformation matrix;Enable texture mapping in the rendering pipeline;Setup texture mapping parameters in the rendering pipeline;Enable texture clamping in the rendering pipeline;Retrieve vertex array storing filtrated blocksfor each block in the vertex arrayGet vertex coordinates of block;Get texture coordinates of block;Draw square block onto the screen;end for;
//////////////////////////////*虛擬繪制線(xiàn)程*///////////////////////////////*初始化數(shù)據(jù)*/Read information on set of grids;Initialize vertex shader and fragment shader;/*項(xiàng)目緩沖繪制*/Set virtual screen background to(0,0,0,0);Lock CPU buffer;Read projection matrix into CPU buffer;Read transformation matrix from CPU buffer;Read clipping plane parameters from CPU buffer;Unlock CPU buffer;for every block in grids of blocksSet vertex buffer of block based on vertex coordinates;Set color texture of block based on its grid index byIn one particular voxelif(32-bit color format)R-value=X index(8-bit);G-value=Y(jié) index(8-bit);B-value=Z index(8-bit);A-value=dummy value(8-bit);else if(l6-bit color format)R-value=X index(5-bit);G-value=Y(jié) index(6-bit);B-value=Z index(5-bit);end if;end for;Write vertex and texture information into a vertex array;Set up transformation matrix;Compute deviation of view vector and orientational status;Selecting corresponding axis-aligned grids of blocks according to thedeviation;Retrieve vertex array storing blocksfor each block in the vertex arrayGet vertex coordinates of block;Get texture coordinates of block;Draw square block onto the virtual screen;end for;
/*將數(shù)據(jù)寫(xiě)入CPU緩存*/Lock CPU buffer;Write visibility information(in form of visible block IDs)into CPU buffer;Unlock CPU buffer;
權(quán)利要求
1.一種對(duì)大量高質(zhì)量的體數(shù)據(jù)進(jìn)行交互式體繪制以用于視覺(jué)顯示的系統(tǒng),包括面片讀取器,其用于為預(yù)處理過(guò)程加載一疊紋理面片;用戶(hù)界面,其接收用戶(hù)控制輸入以對(duì)所述體數(shù)據(jù)進(jìn)行平移、旋轉(zhuǎn)、大小調(diào)整和指定剪取面;以及繪制子系統(tǒng),其采用硬件加速方格過(guò)濾法以提供對(duì)大型體數(shù)據(jù)集的交互式繪制。
2.一種圖形處理系統(tǒng),用于將大量體數(shù)據(jù)交互體繪制成可在個(gè)人計(jì)算機(jī)顯示器上顯示的可視圖像,其中所述計(jì)算機(jī)至少具有一個(gè)圖形處理器,所述系統(tǒng)包括預(yù)處理器,其在將從體像素中導(dǎo)出的無(wú)可視用途信息從面片疊的每個(gè)面片的圖形紋理中移除之前對(duì)每個(gè)所述面片進(jìn)行預(yù)處理;體數(shù)據(jù)重組器,其利用所述二維面片重組出所述體數(shù)據(jù)的三維紋理映像;數(shù)據(jù)分割器,其將所述三維紋理映像分割成三疊二維紋理軸對(duì)齊面片;大小調(diào)整器,其調(diào)整所述圖像紋理的大小,以使其邊緣的尺寸為二的整數(shù)次冪,從而產(chǎn)生二維面片;二維數(shù)據(jù)細(xì)分器,其將每個(gè)所述二維面片細(xì)分為更小的紋理方格;界面,其用于接收和請(qǐng)求對(duì)交互式輸入的響應(yīng),所述交互式輸入指定了在所述體數(shù)據(jù)上執(zhí)行的圖像顯示的視圖及大??;處理引擎,其用于對(duì)所述紋理方格實(shí)施選定的變換,所述變換至少包括平移、旋轉(zhuǎn)、大小調(diào)整以及面剪取;繪制引擎,其在所述方格上執(zhí)行兩個(gè)階段的繪制過(guò)程,所述兩個(gè)階段包括虛擬繪制階段,其用于篩選出與視圖相關(guān)的無(wú)可視用途的方格信息;以及主繪制階段,其用于獲取經(jīng)過(guò)處理的方格以做進(jìn)一步過(guò)濾;以及基于方格的片元過(guò)濾器,對(duì)所述經(jīng)過(guò)處理的方格進(jìn)行過(guò)濾,從而獲得適合于作為紋理方格顯示的圖像元素并繪制最終圖像。
3.一種用于將大量二維面片疊形式的體數(shù)據(jù)繪制成可在個(gè)人計(jì)算機(jī)顯示器上顯示的可視圖像的交互式體繪制方法,其中所述個(gè)人計(jì)算機(jī)至少具有一個(gè)圖形處理器,所述方法包括利用所述二維面片重新組成所述體數(shù)據(jù)的三維紋理映像;將所述三維紋理映像分割成三疊三維紋理面片;重新調(diào)整所述三維紋理面片的大小,以使所述每個(gè)三維紋理面片的邊緣的尺寸為二的整數(shù)次冪,從而產(chǎn)生經(jīng)過(guò)重新調(diào)整大小的二維面片;將所述經(jīng)過(guò)重新調(diào)整大小的二維面片細(xì)分成多個(gè)方格的網(wǎng),所述每個(gè)方格均包含相關(guān)的深度及紋理坐標(biāo)信息;根據(jù)指定了所述體數(shù)據(jù)的圖像顯示的視圖及大小的交互式輸入,在所述方格網(wǎng)上執(zhí)行選定的變換,所述變換至少包括平移、旋轉(zhuǎn)、大小調(diào)整以及面剪取,所述交互式面剪取包括以下步驟實(shí)施軸對(duì)齊面剪??;以及實(shí)施任意的面剪取;在所述方格網(wǎng)上執(zhí)行兩個(gè)階段的繪制過(guò)程,所述兩個(gè)階段包括虛擬繪制階段,其用于計(jì)算與視圖相關(guān)的無(wú)可視用途的方格信息;以及主繪制階段,其用于獲取經(jīng)過(guò)處理的方格以做進(jìn)一步過(guò)濾;以及對(duì)所述經(jīng)過(guò)處理的方格進(jìn)行基于方格的片元過(guò)濾,從而產(chǎn)生適合于顯示的圖像元素并繪制最終圖像。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,每個(gè)所述三維紋理面片的尺寸被調(diào)整為二的乘冪,并且對(duì)正整數(shù)a,b和c,所述重新調(diào)整大小的步驟進(jìn)一步包括將每個(gè)x-軸對(duì)齊的面片的尺寸重新調(diào)整為2b×2c;將每個(gè)y-軸對(duì)齊的面片的尺寸重新調(diào)整為2a×2c;以及將每個(gè)z-軸對(duì)齊的面片的尺寸重新調(diào)整為2a×2b。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述細(xì)分步驟包括將所述經(jīng)過(guò)重新調(diào)整大小的二維面片分為包含具有較小紋理的多個(gè)正方格的網(wǎng),每個(gè)所述方格的尺寸為2n×2n,同時(shí)為每個(gè)所述方格關(guān)聯(lián)一個(gè)網(wǎng)索引,這里n<a,n<b,并且n<c;以及選擇n以符合比例k∶n,這里n是一個(gè)整數(shù)并且k=min(a,b,c)。
6.根據(jù)權(quán)利要求3所述的方法,其特征在于進(jìn)一步包括在頂點(diǎn)數(shù)組中儲(chǔ)存以角部的頂點(diǎn)坐標(biāo)及相應(yīng)的所述方格的剪取紋理坐標(biāo)表示的所述網(wǎng)索引的步驟,每個(gè)所述頂點(diǎn)數(shù)組只存儲(chǔ)一個(gè)單獨(dú)的方格的所有信息。
7.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述虛擬繪制階段包括繪制所述體數(shù)據(jù)以計(jì)算出與視圖相關(guān)的可視性信息,并將所述可視性信息存儲(chǔ)在位于主系統(tǒng)存儲(chǔ)器中的緩沖器空間中;并且其中所述主繪制階段包括繪制所述最終圖像時(shí)的靜態(tài)方格過(guò)濾和動(dòng)態(tài)方格過(guò)濾;在所述系統(tǒng)存儲(chǔ)器中儲(chǔ)存當(dāng)前的繪制狀態(tài),所述當(dāng)前繪制狀態(tài)至少包括平移、旋轉(zhuǎn)、大小調(diào)整以及面剪??;以及在所述虛擬繪制階段與所述主繪制階段之間共享所述當(dāng)前繪制狀態(tài)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,一個(gè)主繪制線(xiàn)程被分配給一個(gè)主圖像槽,并且至少有一個(gè)虛擬繪制線(xiàn)程被分配給副圖像槽。
9.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述主繪制線(xiàn)程和所述至少一個(gè)虛擬繪制線(xiàn)程被分配在多個(gè)圖形處理器之中。
10.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述虛擬體繪制步驟包括根據(jù)所述體數(shù)據(jù)的當(dāng)前平移和旋轉(zhuǎn)狀態(tài),從所述三組軸對(duì)齊的方格網(wǎng)中選取相關(guān)的一組;提取出存儲(chǔ)在所述頂點(diǎn)數(shù)組中的頂點(diǎn)信息;以顏色紋理方式在所述方格網(wǎng)中儲(chǔ)存每個(gè)所述方格的標(biāo)識(shí);在繪制過(guò)程中應(yīng)用軸對(duì)齊或用戶(hù)自定義的剪取面;將所述拼合的紋理繪制在一個(gè)虛擬屏幕緩沖中,以計(jì)算任何不可見(jiàn)方格的數(shù)據(jù),然后再將所述虛擬屏幕緩沖中可見(jiàn)方格的標(biāo)識(shí)傳送到系統(tǒng)內(nèi)存中。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述方格標(biāo)識(shí)存儲(chǔ)包括下列步驟確定用于存儲(chǔ)方格標(biāo)識(shí)的圖像格式;按照位置項(xiàng)目確定每個(gè)方格的空間標(biāo)識(shí),所述空間標(biāo)識(shí)是從零開(kāi)始遞增的整數(shù);以及將每個(gè)空間標(biāo)識(shí)映射為一個(gè)顏色值。
12.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述繪制拼合的紋理的步驟是一個(gè)多圖形處理器處理的過(guò)程,在所述過(guò)程中使用了拼合顏色紋理、透明度紋理和頂點(diǎn)緩沖的多個(gè)頂點(diǎn)著色器及片元著色器。
13.根據(jù)權(quán)利要求12所述的方法,其特征在于,所述多圖形處理器處理的過(guò)程包括下列步驟根據(jù)副圖像槽的有效數(shù)目將所述方格網(wǎng)分成不同的組;將不同組的面片以虛擬繪制項(xiàng)目緩沖的形式單獨(dú)繪制在虛擬屏幕上;拼合所有可視性信息;以及將所述拼合的可視性信息結(jié)果拷貝至系統(tǒng)內(nèi)存中。
14.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述主繪制階段包括下列步驟進(jìn)行靜態(tài)方格過(guò)濾,以濾除僅包含無(wú)可視用途信息的與視圖無(wú)關(guān)的方格;以及進(jìn)行動(dòng)態(tài)方格過(guò)濾,以濾除因遮擋而造成的無(wú)可視用途的與視圖相關(guān)的方格。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于,在所述靜態(tài)方格過(guò)濾步驟中,處理所述三組軸對(duì)齊的方格網(wǎng)內(nèi)的每一個(gè)方格,以減少?gòu)捏w像素中導(dǎo)出的靜態(tài)無(wú)可視用途信息,所述處理步驟包括定義所述無(wú)可視用途信息為一組特定的顏色項(xiàng)目,即一個(gè)過(guò)濾集合;根據(jù)所述過(guò)濾集合,對(duì)所述方格網(wǎng)中的每個(gè)方格進(jìn)行靜態(tài)方格過(guò)濾,從而通過(guò)光柵化濾除無(wú)可視用途信息;以及如果并且僅當(dāng)整個(gè)方格只填充了所述過(guò)濾集合的顏色項(xiàng)目,則將該方格標(biāo)識(shí)為應(yīng)被去除的方格;以及記錄所有剩余的方塊的索引,所述剩余的方塊即為經(jīng)過(guò)靜態(tài)過(guò)濾的方塊。
16.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述靜態(tài)方格過(guò)濾步驟包括分別通過(guò)三個(gè)階段處理所述三組軸對(duì)齊的方格網(wǎng)內(nèi)的每一個(gè)方格。
17.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述動(dòng)態(tài)方格過(guò)濾步驟包括根據(jù)所述體數(shù)據(jù)的當(dāng)前平移和旋轉(zhuǎn)狀態(tài),從所述三組軸對(duì)齊的方格網(wǎng)中選取相關(guān)的一組;提取所述經(jīng)過(guò)靜態(tài)過(guò)濾的方格的頂點(diǎn)信息;讀取可視性信息和當(dāng)前投影矩陣;利用所述可視性信息確定過(guò)濾的方格;將所述過(guò)濾的方格的頂點(diǎn)緩沖轉(zhuǎn)送至頂點(diǎn)處理器以進(jìn)行光柵化處理,并將經(jīng)過(guò)處理的紋理坐標(biāo)轉(zhuǎn)送至片元處理器中;以及根據(jù)所述頂點(diǎn)緩沖及所述三維紋理映像繪制出最終圖像。
18.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述動(dòng)態(tài)方格過(guò)濾步驟包括使用通過(guò)系統(tǒng)內(nèi)存中的可視性信息確定的過(guò)濾的方格;對(duì)所述過(guò)濾的方格按照深度信息進(jìn)行排序,以得到排序后的過(guò)濾的方格;按照從后向前的順序繪制排序后的過(guò)濾的方格。
全文摘要
本發(fā)明提供了一種用于在常規(guī)計(jì)算機(jī)上對(duì)大型體數(shù)據(jù)進(jìn)行交互式體繪制的計(jì)算機(jī)方法和系統(tǒng),該方法采用了使用三維紋理映射軸對(duì)齊面片和方格過(guò)濾的硬件加速方塊過(guò)濾優(yōu)化。通過(guò)選擇性地傳送體像素/片元方格,片元處理的負(fù)擔(dān)可通過(guò)一個(gè)過(guò)濾過(guò)程得以降低。處理過(guò)程涉及到產(chǎn)生對(duì)應(yīng)的圖像紋理并執(zhí)行兩個(gè)階段的繪制,即虛擬繪制階段和主繪制階段。方格過(guò)濾分成靜態(tài)方格過(guò)濾和動(dòng)態(tài)方格過(guò)濾。靜態(tài)方格過(guò)濾找出傳遞給光柵化流水線(xiàn)的任何與視圖無(wú)關(guān)的無(wú)可視用途信息。動(dòng)態(tài)方格過(guò)濾確定因阻擋而產(chǎn)生的任何與視圖有關(guān)的無(wú)可視用途信息。方格過(guò)濾使用常規(guī)計(jì)算機(jī)圖像處理器的頂點(diǎn)著色器及像素著色器。該方法可以以多線(xiàn)程及多圖像處理器的方式進(jìn)行。
文檔編號(hào)G06T15/40GK1691069SQ200410086020
公開(kāi)日2005年11月2日 申請(qǐng)日期2004年10月22日 優(yōu)先權(quán)日2004年4月20日
發(fā)明者王平安, 謝永明, 黃田津, 徐嚴(yán)濱 申請(qǐng)人:香港中文大學(xué)