两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

三維網(wǎng)格模型透明繪制的方法及其系統(tǒng)的制作方法

文檔序號:6376540閱讀:295來源:國知局
專利名稱:三維網(wǎng)格模型透明繪制的方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機繪圖技術(shù)領(lǐng)域,尤其涉及ー種三維網(wǎng)格模型透明繪制的方法及其系統(tǒng)?!?br> 背景技術(shù)
計算機圖形圖像繪制技術(shù)是指ー種使用數(shù)學算法將ニ維或三維圖形轉(zhuǎn)化為計算顯示器的柵格形式的技木。該技術(shù)大量應用在3D游戲和動畫,計算機輔助設(shè)計,電影特效,數(shù)字醫(yī)學等領(lǐng)域。三維空間的幾何模型簡稱為三維模型,主要有線框模型、表面模型和實體模型三種表示方法,其中表面模型運用最為廣泛,網(wǎng)格模型是表面模型的ー種常用形式。傳統(tǒng)的網(wǎng)格繪制技術(shù)中,都是基于光柵化的方法,先把網(wǎng)格的所有三角形投影到視平面然后根據(jù)屏幕的分辨率進行離散化得到片元,經(jīng)過一定的判斷條件,最終得到屏幕上每個像素的像素值。由于使用圖形學硬件繪制的過程中,繪制的順序不是虛擬照相機觀察的方向從前往后或從后往前按順序進行繪制,而是ー種亂序的繪制。對于不透明的網(wǎng)格繪制,在這個過程中使用z緩沖區(qū)(z-buffer)來記錄片元距離視平面的距離,取最靠近視平面的片元作為屏幕的像素輸出,以此來解決網(wǎng)格之間的遮擋問題。而對于透明或半透明的網(wǎng)格,使用傳統(tǒng)圖形硬件基于亂序的繪制會引起透明網(wǎng)格多個片元合成計算到屏幕最終像素的合成順序不正確,最終導致繪制出的網(wǎng)格之間的層次關(guān)系不正確。現(xiàn)有處理網(wǎng)格透明繪制上常見的是使用逐層深度剝離(Depth Peeling)以及在此基礎(chǔ)上改進的多種增強深度剝離的方法,如“在高深度復雜性場景中繪制透明面的系統(tǒng)和方法”中的混合型層剝離和連貫層剝離兩種方法以及“同時遮蔽透明度圖形處理”、“倍増遮蔽透明度圖形處理”中使用多采樣技術(shù)多次迭代繪制合成透明效果。深度剝離對網(wǎng)格數(shù)據(jù)根據(jù)當前視角的深度,從近到遠或從遠到近逐層分離,這種方案缺點在于透明顯示的精度不足,有固定的深度層數(shù)限制,如果很多三角網(wǎng)格的片斷在同一層,深度剝離的效果很差,導致繪制的透明效果時顯示不出網(wǎng)格之間的層次結(jié)構(gòu) ’另外,當處理大規(guī)模的網(wǎng)格數(shù)據(jù)時,由于使用傳統(tǒng)圖形渲染管線,毎次剝離需要對傳統(tǒng)的Z深度緩存區(qū)及模版緩存區(qū)進行讀寫,所以毎次只能剝離1-2層,完成最終的繪制需要多次剝離和繪制操作,繪制速度慢,效率低。即使增強的深度剝離技術(shù)如“混合型層剝離”及“連貫層剝離”先對ー些面進行預排序或?qū)δP涂臻g預排序,減少亂序的面的數(shù)量,但仍不能避免使用傳統(tǒng)圖形渲染管線及傳統(tǒng)的圖形緩沖區(qū)進行繪制來實現(xiàn)深度剝離這一基本步驟,因此每次只能剝離少數(shù)面,需要多次剝離才能達到理想的效果,所以效率仍不能滿足需求。而使用多采樣技術(shù)的透明效果繪制,使用多采樣技術(shù)提高了深度剝離面的數(shù)量和效率,但每次剝離仍然對面的數(shù)量有限制,受限于圖形硬件對多采樣技術(shù)中每個像素多采樣數(shù)量,仍然需要多次迭代繪制及緩沖區(qū)交換數(shù)據(jù)才能得到最終結(jié)果,對于復雜深度的網(wǎng)格模型的透明繪制,效率依然不能滿足需求。綜上可知,現(xiàn)有的三維網(wǎng)格模型透明繪制的技術(shù)在實際使用上,顯然存在不便與缺陷,所以有必要加以改迸。

發(fā)明內(nèi)容
針對上述的缺陷,本發(fā)明的目的在于提供ー種三維網(wǎng)格模型透明繪制的方法及其系統(tǒng),以提高三維網(wǎng)格模型透明繪制的精度和速度。為了實現(xiàn)上述目的,本發(fā)明提供ー種三維網(wǎng)格模型透明繪制的方法,所述方法包括如下步驟A、在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù);B、將所有的所述鏈表根據(jù)所述片元的深度進行排序;C、對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顔色值;D、將所述每個像素位置上的所述像素的顔色值復制到顯示緩沖區(qū),在顯示窗ロ顯示所述三維網(wǎng)格模型。根據(jù)所述的方法,所述步驟A包括Al、對所述三維網(wǎng)格模型的繪制進行初始化;A2、輸入所述三維網(wǎng)格模型,并進行光柵化處理,獲得所述每個像素的位置的片元的數(shù)據(jù);A3、對每個所述片元進行并行處理,使每個所述片元存儲在共享存儲紋理內(nèi);A4、查看所述片元進行并行處理的結(jié)果,井根據(jù)剩余的所述片元的數(shù)量進行相應的處理。根據(jù)所述的方法,所述步驟Al包括All、將每個像素對應的存儲在所有所述片元的鏈表共享的存儲區(qū)域;A12、建立ー個與所述顯示窗ロ分辨率一致的表頭ニ維紋理;A13、建立ー個與所述顯示窗ロ分辨率一致的信號量ニ維紋理;A14、初始化所述三維網(wǎng)格模型的全局片元計算器。根據(jù)所述的方法,所述步驟A3包括A31、根據(jù)當前所述像素位置,讀取所述信號量ニ維紋理對應位置的數(shù)值,井根據(jù)所述數(shù)值執(zhí)行相應的操作;A32、根據(jù)當前所述片元對應的像素位置和所述全局片元計算器的讀數(shù),將所述片元的相關(guān)信息以及在所述片元在當前像素位置上鏈表的第一元素在所述鏈表共享的存儲區(qū)域的位置信息存儲在所述鏈表共享的存儲區(qū)域;A33、修改所述表頭ニ維紋理,在對應的像素位置上改寫為所述鏈表共享的存儲區(qū)域的所述片元的位置信息;A34、將所述信號量置為0,開放對當前所述鏈表的控制;A35、將所述片元從圖形處理中去除。根據(jù)所述的方法,在所述步驟Al中對三維網(wǎng)格模型的繪制區(qū)域采用圖形處理器中的紋理進行存儲;在所述步驟A3中使用片斷著色器對每個所述片元進行并行處理;在所述步驟A4中查詢所述片斷著色器處理結(jié)果,在有剩下未被擦除的片元時,增
5加所述共享存儲紋理的存儲空間;在沒有剩下未被擦除的片元時,將所有所述片元存儲到對應的像素位置的鏈表內(nèi)。 根據(jù)所述的方法,所述鏈表共享的存儲區(qū)域采用圖形處理器中的紋理進行存儲;所述鏈表共享的存儲區(qū)域包括數(shù)據(jù)部分和指針部分;所述片元的相關(guān)信息包括所述片元的顔色、不透明度或者深度。根據(jù)所述的方法,所述步驟B包括BI、使用所述片斷著色器并行遍歷每個像素位置上對應的鏈表,并存儲在ー個臨時緩存數(shù)組中;B2、使用所述片斷著色器對每個鏈表的臨時緩存數(shù)組中的片元根據(jù)其深度進行排序。根據(jù)所述的方法,所述步驟BI包括B11、所述片斷著色器讀取所述每個像素位置鏈表頭部的表頭ニ維紋理,獲得所述鏈表的頭部信息;B12、為所述每條鏈表新創(chuàng)建ー個臨時片元存儲區(qū),存儲每個鏈表的所有片元;B13、依次讀取每個所述鏈表中元素,將所述元素中的片元數(shù)據(jù)復制到所述臨時片元存儲區(qū)中。根據(jù)所述的方法,所述鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù)時將基于相同像素位置的片元作為ー個片元集合保存。為了實現(xiàn)本發(fā)明的另ー發(fā)明目的,本發(fā)明還提供了ー種用于實現(xiàn)上述任一項所述的方法的系統(tǒng),所述系統(tǒng)包括保存模塊,用于在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù);排序模塊,用于將所有的所述鏈表根據(jù)所述片元的深度進行排序;獲取模塊,用于對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顏色值;顯示模塊,用于將所述每個像素位置上的所述像素的顔色值復制到顯示緩沖區(qū),在顯示窗ロ顯示所述三維網(wǎng)格模型。本發(fā)明通過使用了可動態(tài)調(diào)整大小的鏈表來存儲每個像素位置上的片元數(shù)據(jù),提高了三維網(wǎng)格模型透明顯示時的精度;另外,通過使用片斷著色器對片元進行并行存儲、排序及合成的方法,提高了繪制的速度,也増加了數(shù)據(jù)的吞吐量,在輸入大規(guī)模的網(wǎng)格數(shù)據(jù)時,仍能保持繪制的實時性。


圖I是本發(fā)明第一實施例提供的三維網(wǎng)格模型透明繪制的系統(tǒng)結(jié)構(gòu)示意圖;圖2是本發(fā)明第二實施例提供的三維網(wǎng)格模型透明繪制的方法;圖3A是本發(fā)明一個實施例提供的肝臟及周邊血管網(wǎng)格模型透明繪制前效果圖;圖3B是本發(fā)明一個實施例提供的肝臟及周邊血管網(wǎng)格模型透明繪制后效果圖;圖4A是本發(fā)明一個實施例提供的龍模型透明繪制前效果圖;圖4B是本發(fā)明一個實施例提供的龍模型透明繪制后效果圖5A是本發(fā)明一個實施例提供的女神模型透明繪制前效果圖;圖5B是本發(fā)明一個實施例提供的女神模型透明繪制后效果圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進ー步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。參見圖1,在本發(fā)明的第一實施例中,提供了三維網(wǎng)格模型透明繪制的系統(tǒng)100,所述系統(tǒng)包括保存模塊10,用于在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù);排序模塊20,用于將所有的所述鏈表根據(jù)所述片元的深度進行排序;獲取模塊30,用于對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顏色值;顯示模塊40,用于將所述每個像素位置上的所述像素的顔色值復制到顯示緩沖區(qū),在顯示窗ロ顯示所述三維網(wǎng)格模型。在該實施中,提出了ー種三維網(wǎng)格模型透明繪制的系統(tǒng)100,利用該三維網(wǎng)格模型透明繪制的系統(tǒng)100進行三維網(wǎng)格模型透明繪制,無需多次迭代繪制,無需進行深度剝離,解決現(xiàn)有技術(shù)中三維網(wǎng)格模型透明繪制精度不足、效率低下的問題。與基于深度剝離的方法不同的是,本發(fā)明第一實施例提供的三維網(wǎng)格模型透明繪制的系統(tǒng)100不是基于深度剝離的思想,不必進行剝離操作,而是一次把所有的片元排序后得到正確的合成順序,然后ー次繪制即可得最終結(jié)果。因此,不需要對深度、模版等傳統(tǒng)緩沖區(qū)的多次讀寫操作,提高了繪制的效率。本發(fā)明的多個實施例完全基于新一代的OpenGL 4. O及以上版本(如OpenGL
4.l、0penGL4. 2等)可編程管線及擴展來實現(xiàn)。透明繪制精度的提高使用了新的圖形硬件及新的圖形接ロ OpenGL 4. O及以上版本的支持,動態(tài)修改紋理數(shù)據(jù),使用了可動態(tài)調(diào)整大小的鏈表來存儲片元,因此沒有對透明面的層數(shù)限制。三維網(wǎng)格模型透明繪制效率的提高通過減少調(diào)用圖形硬件繪制的次數(shù),使用新的硬件與軟件支持,對鏈表排序后直接對鏈表中的片元合成后一次繪制完成。另ー方面,該實施例中的透明繪制是指網(wǎng)格模型在被計算機繪制時,光線可以透過這個網(wǎng)格模型,可以觀察到被網(wǎng)格模型表面遮掩的物體。使用透明繪制的方法,可以方便用戶觀察到物體內(nèi)部的信息,確定內(nèi)部物體在當前網(wǎng)格模型的位置關(guān)系。參見圖2,在本發(fā)明的第二實施例中,提供ー種三維網(wǎng)格模型透明繪制的方法,所述方法包括如下步驟步驟S201中,在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù);該步驟由保存模塊10實現(xiàn);步驟S202中,將所有的所述鏈表根據(jù)所述片元的深度進行排序;該步驟由排序模塊20實現(xiàn);步驟S203中,對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顏色值;該步驟由獲取模塊30實現(xiàn);
步驟S204中,將所述每個像素位置上的所述像素的顔色值復制到顯示緩沖區(qū),在顯示窗ロ顯示所述三維網(wǎng)格模型;該步驟由顯示模塊40實現(xiàn)。在該實施例中,所述步驟S201中,在繪制區(qū)域每個像素的位置都使用一個鏈表保存當前位置上的片元數(shù)據(jù)。網(wǎng)格的片元數(shù)據(jù)是指由三維世界的幾何模型以視角方向投影到ニ維視平面后光柵化離散為一定分辨率的像素塊,與常規(guī)的ニ維圖片的像素塊不同,這種片元數(shù)據(jù)不僅存儲顏色屬性(RGBA值),還存儲著深度信息。片元的深度是指當前片斷在當前視角方向的深度。而鏈表是指ー種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(鏈表中每ー個元素稱為結(jié)點)組成,結(jié)點可以在運行時動態(tài)生成。每個結(jié)點包括兩個部分一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另ー個是存儲下ー個結(jié)點地址的指針域。鏈表相對于固定數(shù)組的優(yōu)勢在于可以在程序運行時動態(tài)控制結(jié)點的數(shù)量,而固定數(shù)組必須在程序編譯運行前就要固定所能存儲數(shù)據(jù)的多少。參見圖3A 圖5B顯示采用本發(fā)明提供的方法及系統(tǒng)對多種模型進行透明繪制后與透明繪制前的效果對比。具體的,在所述步驟S202中,對所有鏈表根據(jù)片元的深度進行排序;在所述步驟S203中,對已排序的片元的顏色進行合成,最終得到每個像素的顔色值。根據(jù)每個鏈表中的片元的顔色、不透明度等屬性,使用片斷著色器將已根據(jù)深度排序好的片元以從遠往近或從近到遠的順序進行疊加合成,得到該鏈表對應像素位置上像素的顏色值。每個鏈表的最終顏色值的計算過程,基于片元的Alpha通道的數(shù)值進行混合,假設(shè)處于同一像素位置上的片元已根據(jù)當前視角的深度從后到前排序,遵循以下計算公式可得到該鏈表的最終顏色colors+1 = colors+FsX (l_colors · Alpha)在所述步驟S204中,將每個像素位置上最終的像素顔色值復制到顯示緩沖區(qū),在屏幕上顯示出來。由此,可以獲得三維網(wǎng)格模型透明繪制的效果圖。在本發(fā)明的第三實施例中,所述步驟S201包括Al、對所述三維網(wǎng)格模型的繪制進行初始化;該步驟可由保存模塊10中的初始化子模塊實現(xiàn);A2、輸入所述三維網(wǎng)格模型,并進行光柵化處理,獲得所述每個像素的位置的片元的數(shù)據(jù);該步驟可由保存模塊10中的輸入子模塊實現(xiàn);A3、對每個所述片元進行并行處理,使每個所述片元存儲在共享存儲紋理內(nèi);該步驟可由保存模塊10中的并行處理子模塊實現(xiàn);A4、查看所述片元進行并行處理的結(jié)果,井根據(jù)剩余的所述片元的數(shù)量進行相應的處理;該步驟可由保存模塊10中的查看子模塊實現(xiàn)。具體的,所述步驟Al包括All、將每個像素對應的存儲在所有所述片元的鏈表共享的存儲區(qū)域;A12、建立ー個與所述顯示窗ロ分辨率一致的表頭ニ維紋理;A13、建立一個與所述顯不窗ロ分辨率一致的信號量ニ維紋理;A14、初始化所述三維網(wǎng)格模型的全局片元計算器。而所述步驟A32包括A31、根據(jù)當前所述像素位置,讀取所述信號量ニ維紋理對應位置的數(shù)值,井根據(jù)所述數(shù)值執(zhí)行相應的操作;A32、根據(jù)當前所述片元對應的像素位置和所述全局片元計算器的讀數(shù),將所述片元的相關(guān)信息以及在所述片元在當前像素位置上鏈表的第一元素在所述鏈表共享的存儲區(qū)域的位置信息存儲在所述鏈表共享的存儲區(qū)域;A33、修改所述表頭ニ維紋理,在對應的像素位置上改寫為所述鏈表共享的存儲區(qū)域的所述片元的位置信息;A34、將所述信號量置為0,開放對當前所述鏈表的控制;A35、將所述片元從圖形處理中去除。優(yōu)選的,在所述步驟Al中對三維網(wǎng)格模型的繪制區(qū)域采用圖形處理器中的紋理進行存儲;在所述步驟A3中使用片斷著色器對每個所述片元進行并行處理;在所述步驟A4中查詢所述片斷著色器處理結(jié)果,在有剩下未被擦除的片元時,增加所述共享存儲紋理的存儲空間;在沒有剩下未被擦除的片元時,將所有所述片元存儲到對應的像素位置的鏈表內(nèi)。優(yōu)選的,所述鏈表共享的存儲區(qū)域采用圖形處理器中的紋理進行存儲;所述鏈表共享的存儲區(qū)域包括數(shù)據(jù)部分和指針部分;所述片元的相關(guān)信息包括所述片元的顔色、不透明度或者深度。在該實施例中的鏈表使用OpenGL讀寫圖形處理器(GPU)中的紋理來進行模擬。通過下述步驟實現(xiàn)三維網(wǎng)格模型透明繪制的方法的,首先執(zhí)行步驟S201的操作,具體包括a)初始化。①每個像素對應的存儲片元的鏈表使用ー個所有鏈表一起共享的存儲區(qū)域,這個區(qū)域使用圖形處理器中的紋理進行存儲,下面稱為“共享存儲紋理”,為下面通過OpenGIAO或以上版本的可編程管線中的片斷著色器(Fragment Shader)對鏈表元素讀取、修改做準備。這個共享的存儲區(qū)域的每個單元都由兩部分組成第一部分是數(shù)據(jù)部分,存儲片元的顔色、不透明度或者深度等信息。第二部分是指針部分,存儲的是與該片元同一像素位置上的前一個被處理的片元在共享存儲紋理的位置。共享存儲紋理的大小是可變的,能根據(jù)片元的數(shù)量動態(tài)增加存儲區(qū)域的大小。毎次存儲區(qū)域的動態(tài)增加,是通過使用著色器后統(tǒng)計沒有存入鏈表的片元數(shù)量來確定的,如果存儲空間是足夠的,經(jīng)過片斷著色器處理后剩下的片元數(shù)量為0,否則不為0,為仍未存儲進鏈表的片元的數(shù)量。②建立一個與當前顯示窗ロ分辨率一致的表頭ニ維紋理,紋理中的每個單元記錄的是當前単元對應的像素位置的鏈表頭部,這個頭部包含了一個指針,指向的是當前像素位置上鏈表的第一個元素在共享存儲紋理的位置。③建立一個與當前顯示窗ロ分辨率一致的信號量ニ維紋理,記錄的是當前鏈表是否有其它線程在操作,決定了是否能在當前線程對當前鏈表進行新增結(jié)點操作,防止多個線程對同一鏈表同時進行操作導致的沖突。初始化該紋理,全置為O。④初始化全局片元計數(shù)器,用于記錄當前所有已經(jīng)被處理的片元的數(shù)量,初始值為O。b)輸入網(wǎng)格模型,將網(wǎng)格投影到ニ維視平面上,并進行光柵化,得到離散的像素塊,即片元。所述網(wǎng)格模型可以由透明、半透明或不透明的網(wǎng)格組成。c)使用片斷著色器,對每個片元進行并行處理,使其存儲在共享存儲紋理內(nèi),每個片元的處理都是獨立的。步驟如下①根據(jù)當前的像素位置,讀取信號量ニ維紋理對應位置的數(shù)值,如果當前信號量為1,說明有其它線程在操作當前鏈表,則進行等待,等待信號量為O時執(zhí)行下一歩操作。如果當前信號量為0,則改寫當前信號量,置其為1,防止其它線程操作當前鏈表。②根據(jù)當前片元對應的像素位置和全局片元計數(shù)器的讀數(shù),把片元的顔色、不透明度、深度等信息以及在當前像素位置上鏈表的第一個元素在共享存儲紋理的位置一井在共享存儲紋理存儲起來。③修改步驟S201的a)的②步驟存儲的表頭ニ維紋理,在對應的像素位置上改寫為剛才在共享存儲紋理存儲的片元的位置。④將當前信號量置為0,放開對當前鏈表的控制,允許其它線程操作當前鏈表。⑤如果上述①②③④操作都成功,則把該片元從圖形處理器的流水線中擦除;否則,說明共享存儲紋理空間不足,則不擦除該片元。d)查詢片斷著色器處理結(jié)果,獲取剩下未被擦除的片元的數(shù)量,如果數(shù)量不為0,說明共享存儲紋理的空間不足,増加共享存儲紋理空間后,返回到步驟S201的a)。如果數(shù)量為0,說明已經(jīng)成功把所有片元都處理完畢,所有片元都存儲進對應像素位置的鏈表內(nèi),跳轉(zhuǎn)到步驟S202。在本發(fā)明的第四實施例中,所述步驟S202包括BI、使用所述片斷著色器并行遍歷每個像素位置上對應的鏈表,并存儲在ー個臨時緩存數(shù)組中;該步驟可由排序模塊20中的片斷著色器實現(xiàn);B2、使用所述片斷著色器對每個鏈表的臨時緩存數(shù)組中的片元根據(jù)其深度進行排序;該步驟可由排序模塊20中的片斷著色器實現(xiàn)。所述步驟BI包括B11、所述片斷著色器讀取所述每個像素位置鏈表頭部的表頭ニ維紋理,獲得所述鏈表的頭部信息;B12、為所述每條鏈表新創(chuàng)建ー個臨時片元存儲區(qū),存儲每個鏈表的所有片元;B13、依次讀取每個所述鏈表中元素,將所述元素中的片元數(shù)據(jù)復制到所述臨時片元存儲區(qū)中。在上述多個實施例中,所述鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù)時將基于相同像素位置的片元作為ー個片元集合保存。在該實施例中,步驟S202,對所有鏈表根據(jù)片元的深度進行排序;具體的操作包括a)使用片斷著色器并行遍歷每個像素位置上對應的鏈表,并存儲在ー個臨時緩存數(shù)組中。遍歷的過程如下①在片斷著色器中讀取步驟S201的a)的②步驟中的記錄每個像素位置鏈表頭部的表頭ニ維紋理,得到鏈表的頭部信息,即鏈表的第一個元素在共享存儲紋理的位置。②為每條鏈表新創(chuàng)建ー個臨時片元存儲區(qū),存儲每個鏈表的所有片元。
③讀取每個鏈表第一個元素,將元素中的片元數(shù)據(jù)(顔色、不透明度、深度)復制到臨時片元存儲區(qū)中,根據(jù)元素的指針,獲得下ー個元素的訪問位置,讀取下ー個元素,以此類推讀取整個鏈表。鏈表讀取完畢后,跳轉(zhuǎn)到步驟S202的b)。b)使用片斷著色器對每個鏈表的臨時緩存數(shù)組中的片元根據(jù)其深度進行排序,使得每個鏈表中的片元都是以從遠到近或從近到遠的方式進行排列的。排序算法可以選擇冒 泡排序、桶排序、快速排序、堆排序、雙調(diào)排序等方法。在上述多個實施例中,可以包括以下的操作方式步驟S201使用鏈表保存片元時,將幾個基于相同像素位置的片元作為ー個片元集合,也稱為頁,保存在共享存儲紋理,鏈表的結(jié)構(gòu)變?yōu)槊總€元素由一個頁及指向下ー個頁的指針構(gòu)成。此后遍歷片元也是在此基礎(chǔ)上從毎次遍歷ー個片元變?yōu)槊看伪闅vー個頁。步驟S202中,在某種對繪制精度要求不高的情況下,使用固定數(shù)組代替鏈表保存片元。步驟S203中,在精度要求提高的情況下,可以以高于顯示窗ロ分辨率的方法對片元進行采樣,并保存在以此種高分辨率的像素排列對應的鏈表中。此時,步驟S201的a)的②中建立的用于記錄每個鏈表第一個元素位置的表頭ニ維紋理的分辨率也與此種高分辨
率一致。步驟S204中,在圖形硬件支持和OpenGL擴展下,可以使用GPU的全局顯存中的數(shù)組代替步驟S201中的紋理。上述的三維網(wǎng)格模型透明繪制的系統(tǒng)100的多個模塊可以為軟件單元,硬件單元或軟硬件結(jié)合單元。參見圖4,在本發(fā)明的第六個實施例中,對于ー個透明的網(wǎng)格模型,依照本發(fā)明采用如下技術(shù)步驟進行繪制步驟S201中,在繪制區(qū)域每個像素的位置都使用一個鏈表保存對應位置上的網(wǎng)格模型的片元數(shù)據(jù)。具體的實施方法如下a)定義鏈表的數(shù)據(jù)結(jié)構(gòu),鏈表由表頭和結(jié)點組成。鏈表的結(jié)點包含了兩部分片元數(shù)據(jù)(即片元的顔色、不透明度、深度等屬性)和指針(即下ー個結(jié)點的位置)。鏈表的表頭是ー個指針,存儲的是第一個結(jié)點在實際存儲空間中的位置。顯示窗ロ的每個像素位置都對應了一條鏈表,存儲相應位置上的片元。使用OpenGIA O或以上版本的接ロ在系統(tǒng)中申請三個紋理,即共享存儲紋理、表頭ニ維紋理和信號量ニ維紋理。表頭ニ維紋理的大小設(shè)置為顯示窗ロ的分辨率大小,即存儲了每個像素位置上對應鏈表的表頭。共享存儲紋理存儲的是所有鏈表的所有結(jié)點,其大小在算法運行過程中會根據(jù)繪制過程中鏈表的結(jié)點數(shù)量的增長動態(tài)增加大小。信號量ニ維紋理大小與顯示窗ロ的分辨率大小一致,記錄的是當前鏈表是否有線程在對其操作。設(shè)置ー個全局的片元計數(shù)器,記錄當前所有已被處理的片元的數(shù)量,用于在處理片元過程中為每ー個鏈表結(jié)點安排ー個全局唯一的存儲位置,初始化值為O。b)通過OpenGL提供的接ロ,輸入網(wǎng)格模型的信息,包括網(wǎng)格模型的頂點位置、法向量、顔色、不透明度等屬性。使用OpenGL中內(nèi)置的投影變換操作,將網(wǎng)格投影到ニ維視平面上,并進行光柵化,得到片元。c)使用OpenGL提供的片斷著色器,及OpenGIA O及以后版本提供的運行在片斷著色器中修改紋理的擴展操作,將片元存儲在其對應像素位置的鏈表中,并通過全局片元計數(shù)器,更新每個鏈表表頭。如果共享存儲紋理的空間足夠,在鏈表中存儲了當前處理的片元后,擦除當前處理的片元,否則不擦除當前處理的片元。使用信號量ニ維紋理保證片斷著色器對同一個鏈表的操作是串行執(zhí)行的,避免多個線程同時對同一鏈表進行寫操作導致的沖關(guān)。d)查詢片斷著色器的處理結(jié)果,獲取未擦除的片元數(shù)量。如果未擦除的片元的數(shù)量大于0,說明共享存儲紋理的存儲空間不足,需要為共享存儲紋理重新分配更大的空間,跳轉(zhuǎn)回步驟a)中。如果未擦除的片元數(shù)量為0,說明共享存儲紋理存儲空間足夠,繼續(xù)下面的步驟。步驟S202中,對所有鏈表內(nèi)的片元根據(jù)片元的深度進行排序。a)使用OpenGL提供的片斷著色器,訪問表頭ニ維紋理,獲取每個鏈表的第一個結(jié)點在共享存儲紋理中的位置。為每個鏈表建立ー個臨時存儲數(shù)組,用于保存鏈表中所有片元的信息。根據(jù)得到的每個鏈表的第一個結(jié)點的位置,使用片斷著色器訪問共享存儲紋理,得到結(jié)點的數(shù)據(jù),將結(jié)點中的片元信息保存在臨時存儲數(shù)組中,并根據(jù)當前結(jié)點中的指針,獲得下一個結(jié)點的位置,以此類推,可以遍歷所有鏈表中的所有結(jié)點。b)對每個鏈表的臨時存儲數(shù)組根據(jù)片元的深度信息進行排序,可以選擇從后到前或從前到后的順序,排序的算法可以使用冒泡排序、桶排序、快速排序、堆排序、雙調(diào)排序
坐寸ο步驟S203中,對臨時存儲數(shù)組中已排序的片元,根據(jù)片元的顔色、不透明度,以當前視角方向從后到前或從前到后的方法進行顏色合成。遵循以下計算公式可得到每條鏈表中所有片元的最終合成顔色colors+1 = colors+FsX (l_colors · Alpha)步驟S204中,使用OpenGL提供的接ロ,將把每個鏈表片元的最終合成顏色值復制到顯示緩沖區(qū),并顯示在屏幕的顯示窗ロ中。輸入數(shù)據(jù)I為人體上腹部肝臟及周邊血管網(wǎng)格模型,網(wǎng)格的頂點數(shù)量為244166個,三角形數(shù)量為688472個。輸入數(shù)據(jù)2、3為斯坦福大學計算機圖形學實驗室公開的Dragon和Lucy模型,以便用干與其它透明繪制方法進行性能比較。在顯示窗ロ分辨率512*512下,可得到表I各算法的性能比較。由表I可以得到以下結(jié)論,本發(fā)明中的透明繪制方法相對于傳統(tǒng)的深度剝離及其增強算法在性能上大大提高,可以保證在大規(guī)模網(wǎng)格數(shù)據(jù)輸入時仍能保持實時性。
權(quán)利要求
1.ー種三維網(wǎng)格模型透明繪制的方法,其特征在于,所述方法包括如下步驟 A、在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù); B、將所有的所述鏈表根據(jù)所述片元的深度進行排序; C、對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顔色值; D、將所述每個像素位置上的所述像素的顔色值復制到顯示緩沖區(qū),在顯示窗ロ顯示所述三維網(wǎng)格模型。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述步驟A包括 Al、對所述三維網(wǎng)格模型的繪制進行初始化; A2、輸入所述三維網(wǎng)格模型,并進行光柵化處理,獲得所述每個像素的位置的片元的數(shù)據(jù); A3、對每個所述片元進行并行處理,使每個所述片元存儲在共享存儲紋理內(nèi); A4、查看所述片元進行并行處理的結(jié)果,井根據(jù)剩余的所述片元的數(shù)量進行相應的處理。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟Al包括 All、將甸個像素對應的存儲在所有所述片兀的鏈表共孚的存儲區(qū)域; A12、建立ー個與所述顯示窗ロ分辨率一致的表頭ニ維紋理; A13、建立ー個與所述顯不窗ロ分辨率一致的信號量ニ維紋理; A14、初始化所述三維網(wǎng)格模型的全局片元計算器。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟A3包括 A31、根據(jù)當前所述像素位置,讀取所述信號量ニ維紋理對應位置的數(shù)值,井根據(jù)所述數(shù)值執(zhí)行相應的操作; A32、根據(jù)當前所述片元對應的像素位置和所述全局片元計算器的讀數(shù),將所述片元的相關(guān)信息以及在所述片元在當前像素位置上鏈表的第一元素在所述鏈表共享的存儲區(qū)域的位置信息存儲在所述鏈表共享的存儲區(qū)域; A33、修改所述表頭ニ維紋理,在對應的像素位置上改寫為所述鏈表共享的存儲區(qū)域的所述片元的位置信息; A34、將所述信號量置為0,開放對當前所述鏈表的控制; A35、將所述片元從圖形處理中去除。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在所述步驟Al中對三維網(wǎng)格模型的繪制區(qū)域采用圖形處理器中的紋理進行存儲; 在所述步驟A3中使用片斷著色器對每個所述片元進行并行處理; 在所述步驟A4中查詢所述片斷著色器處理結(jié)果,在有剩下未被擦除的片元時,増加所述共享存儲紋理的存儲空間;在沒有剩下未被擦除的片元時,將所有所述片元存儲到對應的像素位置的鏈表內(nèi)。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述鏈表共享的存儲區(qū)域采用圖形處理器中的紋理進行存儲;所述鏈表共享的存儲區(qū)域包括數(shù)據(jù)部分和指針部分; 所述片元的相關(guān)信息包括所述片元的顔色、不透明度或者深度。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟B包括BI、使用所述片斷著色器并行遍歷每個像素位置上對應的鏈表,并存儲在ー個臨時緩存數(shù)組中;B2、使用所述片斷著色器對每個鏈表的臨時緩存數(shù)組中的片元根據(jù)其深度進行排序。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟BI包括 B11、所述片斷著色器讀取所述每個像素位置鏈表頭部的表頭ニ維紋理,獲得所述鏈表的頭部信息; B12、為所述每條鏈表新創(chuàng)建ー個臨時片元存儲區(qū),存儲每個鏈表的所有片元; B13、依次讀取每個所述鏈表中元素,將所述元素中的片元數(shù)據(jù)復制到所述臨時片元存儲區(qū)中。
9.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù)時將基于相同像素位置的片元作為ー個片元集合保存。
10.ー種用于實現(xiàn)如權(quán)利要求I 9任一項所述的方法的系統(tǒng),其特征于所述系統(tǒng)包括 保存模塊,用于在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù); 排序模塊,用于將所有的所述鏈表根據(jù)所述片元的深度進行排序; 獲取模塊,用于對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顔色值; 顯示模塊,用于將所述每個像素位置上的所述像素的顔色值復制到顯示緩沖區(qū),在顯示窗ロ顯示所述三維網(wǎng)格模型。
全文摘要
本發(fā)明適用于計算機繪圖技術(shù)領(lǐng)域,提供了一種三維網(wǎng)格模型透明繪制的方法及其系統(tǒng),所述方法包括如下步驟A、在三維網(wǎng)格模型的繪制區(qū)域每個像素的位置使用鏈表和/或固定數(shù)組保存其當前位置上的片元數(shù)據(jù);B、將所有的所述鏈表根據(jù)所述片元的深度進行排序;C、對已排序的所述片元的屬性信息進行合成,獲得所述每個像素的顏色值;D、將所述每個像素位置上的所述像素的顏色值復制到顯示緩沖區(qū),在顯示窗口顯示所述三維網(wǎng)格模型。借此,本發(fā)明提高了三維網(wǎng)格模型透明繪制的精度和速度。
文檔編號G06T15/00GK102915563SQ20121032987
公開日2013年2月6日 申請日期2012年9月7日 優(yōu)先權(quán)日2012年9月7日
發(fā)明者葉建平, 張磊, 張吉帥, 楊光 申請人:深圳市旭東數(shù)字醫(yī)學影像技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
陇西县| 凤山县| 广州市| 新巴尔虎右旗| 法库县| 宁津县| 综艺| 阜城县| 无锡市| 稻城县| 郴州市| 江华| 家居| 长沙县| 新竹县| 府谷县| 松潘县| 綦江县| 揭东县| 布拖县| 石首市| 北碚区| 平远县| 千阳县| 博罗县| 广东省| 高尔夫| 厦门市| 西乌珠穆沁旗| 香港 | 集安市| 土默特左旗| 磴口县| 石家庄市| 商丘市| 旌德县| 乌兰县| 泰兴市| 南岸区| 湟源县| 黑河市|