国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于GPU的三維弧面漸變填充技術(shù)研究與實(shí)現(xiàn)

2018-03-20 09:14羅童心仇建偉王家潤
關(guān)鍵詞:頂點(diǎn)基準(zhǔn)線性

羅童心,仇建偉,王家潤

(華北計(jì)算技術(shù)研究所,北京 100083)

0 引 言

對于三維標(biāo)圖軟件,線面標(biāo)號繪制是其基本的功能。為使圖形符號表達(dá)更多含義,尤其在涵蓋顏色信息外還需要更直觀形象地體現(xiàn)某種趨勢和程度時,通常會對線面標(biāo)號進(jìn)行漸變填充處理,即利用兩種不同顏色的混合效果,展現(xiàn)諸如污染程度、進(jìn)攻方向和顏色權(quán)重等信息。這種繪制效果在軌跡繪制等場合也發(fā)揮著重要作用。此外,相比于單一色彩的填充,漸變填充通常有更好的視覺效果[1-2]。

目前的三維標(biāo)圖應(yīng)用廣泛采用的是基于傳統(tǒng)圖形流水線的繪制方法,即使用固定功能的圖形流水線。該方法需要對曲面上的每個頂點(diǎn)綁定其對應(yīng)的顏色屬性等數(shù)據(jù),再交由圖形流水線完成余下渲染過程,其數(shù)據(jù)計(jì)算主要由CPU執(zhí)行。如將該方法應(yīng)用到三維場景的線面標(biāo)號漸變填充中,則可能無法發(fā)揮較高的性能。這是由于為使線面標(biāo)號的繪制貼合球面,通常需要填充的是細(xì)分程度較高的光滑弧面,這意味著有數(shù)量較多的頂點(diǎn)和三角面片數(shù)據(jù),而在漸變填充中每個頂點(diǎn)的顏色不盡相同,使得CPU串行計(jì)算每個頂點(diǎn)的顏色值將耗費(fèi)大量時間,此外為每個頂點(diǎn)存儲其對應(yīng)的顏色屬性也需要占用大量空間[3-4]。這些問題使得圖形繪制效率較低,在復(fù)雜態(tài)勢標(biāo)繪應(yīng)用中無法滿足實(shí)時快速顯示的要求。

為提高三維線面標(biāo)號的繪制速度,文中在固定管線渲染的基礎(chǔ)上使用能夠替代原有功能模塊的可編程模塊,即頂點(diǎn)和片元著色器,將部分原本在CPU中串行計(jì)算的大量頂點(diǎn)操作轉(zhuǎn)移到GPU中進(jìn)行并行計(jì)算[5]。當(dāng)應(yīng)用于三維弧面漸變填充的場合時,該方法只需傳遞少量參數(shù),在頂點(diǎn)著色器內(nèi)部利用頂點(diǎn)位置等信息計(jì)算頂點(diǎn)對應(yīng)顏色值,同時省去顏色屬性數(shù)組的構(gòu)建和傳輸,在空間和時間性能上都有大幅度的提升。

1 算法基本概念與理論

1.1 球面的經(jīng)緯映射

經(jīng)緯映射是將球面上的三維笛卡爾坐標(biāo)系下的點(diǎn)轉(zhuǎn)換為經(jīng)緯度坐標(biāo)的映射方式,在三維地球的標(biāo)繪中通常用該映射方式取代由三維坐標(biāo)系到二維坐標(biāo)系的正投影或透視投影變換。

對于球心位置為原點(diǎn)(0,0,0)的球,球面上坐標(biāo)為(x,y,z)的三維空間點(diǎn)轉(zhuǎn)換到經(jīng)緯度坐標(biāo)系的公式如下[6]:

(1)

(2)

為使弧面的漸變填充效果均勻平滑地貼合球面弧度,算法需利用球面的經(jīng)緯映射將在三維地球上弧面的各頂點(diǎn)從三維空間坐標(biāo)系映射到二維坐標(biāo)系下。

1.2 漸變模型

1.2.1 關(guān)鍵參數(shù)及含義

(1)顏色混合參數(shù):對于弧面上每個點(diǎn),都對應(yīng)一個顏色混合參數(shù)值,表示該位置上參與漸變的兩種顏色的混合比例,其取值范圍為0.0~1.0。根據(jù)每個頂點(diǎn)的顏色混合參數(shù)para,利用式(3)可以求得該位置應(yīng)該被填充的顏色值。

VertexColor=(1-para)*MainColor+para*

SubColor

(3)

(2)漸變基準(zhǔn):可指定為弧面上任意位置,其對應(yīng)的顏色混合參數(shù)為某個固定值,被作為弧面上其他點(diǎn)計(jì)算顏色混合參數(shù)的參照,通過弧面各個頂點(diǎn)到漸變基準(zhǔn)的距離可以計(jì)算出其他位置對應(yīng)的顏色混合參數(shù)。

(3)漸變半徑:即漸變基準(zhǔn)到弧面包圍體邊界的距離,用于計(jì)算顏色混合參數(shù)。

(4)

1.2.2 輻射漸變

如圖1(a)所示,輻射漸變的漸變基準(zhǔn)為一個點(diǎn),該點(diǎn)的顏色混合參數(shù)為固定值0;輻射漸變的漸變半徑即為指定圓心為漸變基準(zhǔn)的包圍圓半徑;位于包圍圓圓周上的點(diǎn),其顏色混合參數(shù)均為1,其他位置的顏色混合參數(shù)則在其與漸變基準(zhǔn)之間按距離遠(yuǎn)近插值。輻射漸變可以直觀表達(dá)弧面上各點(diǎn)距離漸變基準(zhǔn)的位置遠(yuǎn)近,通常應(yīng)用于對區(qū)域內(nèi)輻射強(qiáng)度等信息的表達(dá)。

1.2.3 線性漸變

如圖1(b)所示,線性漸變的漸變基準(zhǔn)是一條垂直于漸變方向的直線,該直線上所有位置的顏色混合參數(shù)均為固定值0.5;線性漸變的漸變基準(zhǔn)到沿漸變方向的方向包圍盒兩端距離不一定相等,因此線性漸變的漸變半徑有兩個取值;在沿漸變方向包圍盒邊界,顏色混合參數(shù)為1,在與漸變方向相反的包圍盒邊界,顏色混合參數(shù)為0,其他位置的顏色混合參數(shù)則在二者與漸變基準(zhǔn)之間按距離進(jìn)行插值。線性漸變可以直觀表達(dá)弧面的方向趨勢信息以及兩種顏色參與漸變的權(quán)重,權(quán)重較大的顏色,在漸變過程中衰減得較慢,即該顏色在整個面的填充效果上占的份額較多,通常應(yīng)用于行進(jìn)方向等信息的表達(dá)。

圖1 兩種漸變模型及參數(shù)示意

1.3 圖形對象包圍體

1.3.1 包圍圓

對象的包圍圓定義為包含該對象的最小的圓周。在輻射漸變的漸變半徑計(jì)算中,需計(jì)算指定圓心位置的圖形對象包圍圓,即包圍圓的圓心需為漸變基準(zhǔn)點(diǎn)。在確定漸變基準(zhǔn)位置后,將所有頂點(diǎn)遍歷一次,計(jì)算并比較各頂點(diǎn)到中心位置的距離,其最長距離為指定圓心的包圍圓半徑,即輻射漸變的漸變半徑。

1.3.2 方向包圍盒

方向包圍盒(OBB)是較為常用的包圍體類型。它是包含指定繪制對象且相對于坐標(biāo)軸方向任意的最小的長方體[7]。對于線性漸變的漸變半徑計(jì)算,則只需求出該圖形沿指定方向(線性漸變方向)的方向包圍盒。遍歷所有頂點(diǎn),利用向量投影計(jì)算并比較各頂點(diǎn)到漸變基準(zhǔn)的距離,同時運(yùn)用向量的點(diǎn)積判斷頂點(diǎn)相對于漸變基準(zhǔn)的位置,在沿兩個相反方向上的最大距離則分別為方向包圍盒的上下邊界到漸變基準(zhǔn)的距離[8],即為線性漸變的漸變半徑。

2 著色器

2.1 著色程序與GLSL語言

實(shí)驗(yàn)使用GLSL語言編輯著色程序,實(shí)現(xiàn)著色器繪制,以提高渲染過程中GPU的利用率。頂點(diǎn)著色程序是被GPU內(nèi)可編程頂點(diǎn)處理器執(zhí)行的程序,應(yīng)用程序設(shè)定的圖元信息,如頂點(diǎn)坐標(biāo)、顏色值、法向量、紋理坐標(biāo)等頂點(diǎn)屬性,傳入到頂點(diǎn)著色器中進(jìn)行并行處理。存在片元著色程序時,頂點(diǎn)著色器的輸出會作為片元著色器的輸入,再由片元著色器的輸出決定屏幕上像素顯示的顏色,在單一使用頂點(diǎn)著色時,則只對輸入的頂點(diǎn)進(jìn)行操作,頂點(diǎn)之間的部分則按照硬件默認(rèn)的方式進(jìn)行自動插值[9-11]。

GLSL是基于OpenGL的著色語言,在各顯卡上均有較好的支持,相較于僅在NVIDA顯卡上得到支持的Cg等著色語言,具有良好的可移植性[12]。GLSL語言提供了少量的內(nèi)置變量和部分內(nèi)置函數(shù)。

實(shí)驗(yàn)中用內(nèi)置變量gl_Vertex獲取頂點(diǎn)的三維坐標(biāo),使用transform()內(nèi)置函數(shù)對頂點(diǎn)進(jìn)行MVP矩陣變換,以及使用dot()、length()函數(shù)計(jì)算向量點(diǎn)積和長度等。

2.2 Uniform參數(shù)

考慮到圖形流水線的結(jié)構(gòu)和著色器的并行計(jì)算能力,實(shí)驗(yàn)選擇將計(jì)算每個頂點(diǎn)各自顏色的過程放到頂點(diǎn)著色器中進(jìn)行,無需再額外構(gòu)建和綁定頂點(diǎn)顏色數(shù)組。由于著色器中每個頂點(diǎn)的計(jì)算都是獨(dú)立在各個GPU單元間進(jìn)行的,無法在獨(dú)立單元之間進(jìn)行數(shù)據(jù)交換,因此涉及其他頂點(diǎn)的計(jì)算需要在外部程序中預(yù)先求出,再作為常量參數(shù)Uniform或頂點(diǎn)的屬性參數(shù)Attribute傳給著色器。

其中Uniform參數(shù)是綁定到整個著色器、用于所有頂點(diǎn)的參數(shù),而Attribute參數(shù)則是綁定到每個獨(dú)立頂點(diǎn)的參數(shù),通常為與頂點(diǎn)數(shù)組等大的數(shù)組[13-15]。為保證著色器的效率,應(yīng)盡量使用Uniform傳參。

根據(jù)該算法的基本思想,對于中心漸變填充,選擇將漸變半徑和漸變基準(zhǔn)點(diǎn)坐標(biāo)作為Uniform常量參數(shù)傳遞給著色器;對于線性漸變填充,則將漸變半徑、中心點(diǎn)坐標(biāo),以及漸變方向向量作為常量參數(shù)傳遞給著色器,其中線性漸變半徑使用二維向量vec2類型以承載漸變基準(zhǔn)兩側(cè)的半徑值。

3 算法設(shè)計(jì)與實(shí)現(xiàn)

3.1 繪制流程

圖2給出了基于可編程圖形管線的漸變填充繪制過程及每個計(jì)算階段的輸入輸出內(nèi)容,大致可以分為在CPU中進(jìn)行的預(yù)處理計(jì)算過程和在GPU中進(jìn)行的計(jì)算和渲染過程。其中頂點(diǎn)著色器和片元著色器替代了固定管線渲染中原有的固定功能操作模塊,通過將原本在CPU中串行計(jì)算的部分轉(zhuǎn)移到著色器中進(jìn)行并行計(jì)算,以提升整個計(jì)算和繪制過程的效率。

圖2 計(jì)算和繪制過程

3.2 著色程序?qū)崿F(xiàn)

以下給出著色程序的核心代碼,用于并行計(jì)算弧面上各點(diǎn)顯示的顏色,分別被頂點(diǎn)著色器和片元著色器執(zhí)行:

(1)頂點(diǎn)著色器。

uniform vec4 mainColor;//漸變主色

uniform vec4 subColor;//漸變輔色

uniform vec2 centerNode;//漸變基準(zhǔn)位置

uniform vec2 radius;//兩側(cè)漸變半徑值

uniform vec2 angle;//漸變方向角度,為減少三角函數(shù)計(jì)算使用方向向量代替

varying vec4 vertexColor;//頂點(diǎn)顏色

floatpara;//顏色混合參數(shù)

vec2 vector=gl_Vertex.xy-centerNode.xy;//由漸變基準(zhǔn)指向頂點(diǎn)的向量

float distance=dot(vector,angle)/length(angle);//頂點(diǎn)向量沿漸變方向向量的投影距離,大于0表示向量夾角小于90°,反之大于90°

if(distance<0.0) para=distance/radius.x;//計(jì)算顏色混合參數(shù),向量夾角大于90°時應(yīng)用左側(cè)的漸變半徑計(jì)算,反之應(yīng)用右側(cè)漸變半徑計(jì)算

elsepara=distance/radius.y;

vertexColor=subColor*para+mainColor*(1-para);//計(jì)算頂點(diǎn)顏色

transform();//頂點(diǎn)MVP矩陣變換

(2)片元著色器。

varying vec4vertexColor;

gl_FragColor=vertexColor;//渲染像素顏色

4 實(shí)驗(yàn)結(jié)果及分析

圖3給出了基于可編程渲染管線繪制對地球上某弧面分別進(jìn)行輻射漸變和線性漸變填充的效果。AB為漸變基準(zhǔn)位置不同的輻射漸變填充,CD為漸變方向和顏色權(quán)重不同的線性漸變填充。其中C表示漸變角度為0°,兩種顏色權(quán)重均為0.5的線性漸變填充效果;D表示漸變角度為135°,顏色權(quán)重分別為0.3和0.7的效果。AC的填充中未使用α通道。

圖3 漸變填充效果

圖4給出了使用著色器渲染的實(shí)驗(yàn)組與使用固定管線繪制的對照組在性能上的比對結(jié)果,分別從運(yùn)行時間和顯示幀率進(jìn)行對照,展示了在單一繪制對象內(nèi),隨著頂點(diǎn)數(shù)目和三角面片數(shù)目的增加,不同的繪制方案呈現(xiàn)的性能趨勢。其中實(shí)線代表實(shí)驗(yàn)組的測試結(jié)果,虛線代表對照組的測試結(jié)果。測試結(jié)果統(tǒng)計(jì)均基于算法相對復(fù)雜的線性漸變填充。

由圖4可以看出,在三角面數(shù)量較少、網(wǎng)格較為簡單時,二者并未呈現(xiàn)較大的性能差異;當(dāng)三角網(wǎng)格數(shù)目達(dá)到十萬級時,對照組的顯示幀率已經(jīng)開始大幅降低,達(dá)到百萬級時,幀率已經(jīng)下降到20幀以下,幾乎不足以支持流暢顯示;而即使三角網(wǎng)格數(shù)目達(dá)到100萬時,實(shí)驗(yàn)組仍能保持流暢的顯示,幀率維持在30幀以上,直到數(shù)量接近200萬時才不足20幀。對照組的運(yùn)行時間始終呈線性增長趨勢,實(shí)驗(yàn)組運(yùn)行時間則僅在數(shù)量級跨度較大時有少量的增加,在三角面數(shù)量接近200萬時,二者的運(yùn)行時間差異有5倍之多。

由測試結(jié)果可以得出,使用著色器繪制的弧面漸變填充算法有著明顯的性能優(yōu)勢,尤其針對繪制對象數(shù)量較少而三角面數(shù)較多的復(fù)雜線面標(biāo)號,能表現(xiàn)出遠(yuǎn)優(yōu)于傳統(tǒng)固定管線繪制的性能。在渲染管線內(nèi)使用著色器編程,更充分應(yīng)用了GPU的計(jì)算能力,使得每個獨(dú)立的頂點(diǎn)計(jì)算能夠并行進(jìn)行,極大地縮短了計(jì)算時間,優(yōu)化了顯示效果。

圖4 兩種繪制策略在單一繪制對象中

5 結(jié)束語

針對傳統(tǒng)固定管線渲染方法在沿地球弧面的三維線面標(biāo)號漸變填充性能上表現(xiàn)出的不足,提出了基于GPU并行計(jì)算的性能優(yōu)化方法。實(shí)驗(yàn)結(jié)果表明,通過在渲染管線過程中使用著色器編程,提高了算法對GPU的利用率,使得對于頂點(diǎn)的部分計(jì)算過程能夠并行進(jìn)行,極大提升了圖形的繪制效率,同時也減少了頂點(diǎn)部分屬性數(shù)組在空間上的占用,實(shí)現(xiàn)了較高性能應(yīng)用于光滑弧面的兩種漸變填充效果;同時通過在線面標(biāo)號漸變填充這一典型實(shí)例上的應(yīng)用和大量數(shù)據(jù)測試,驗(yàn)證了著色器在大量點(diǎn)線面數(shù)據(jù)處理上的高效率。

[1] 韓李濤,范克楠.三維地形顏色漸變渲染的光滑過渡方法研究[J].地球信息科學(xué)學(xué)報(bào),2015,17(1):31-36.

[2] 張 旭,戴 寧,廖文和,等.基于三維漸變的牙齒磨耗可視化仿真[J].機(jī)械工程學(xué)報(bào),2013,49(3):95-100.

[3] 簡洪登,范湘濤.基于GLSL的多重視頻紋理映射與融合[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(11):3873-3878.

[4] MILOSAVLJEVI? A,DIMITRIJEVI? A,RAN?I? D.GIS-augmented video surveillance[J].International Journal of Geographical Information Science,2010,24(9):1415-1433.

[5] 裘 初,費(fèi)廣正,石民勇.可編程圖形硬件綜述[J].北京廣播學(xué)院學(xué)報(bào):自然科學(xué)版,2004,11(3):13-19.

[6] 王俊杰,徐小剛,胡運(yùn)發(fā),等.魚眼投影在虛擬實(shí)景中的應(yīng)用研究[J].小型微型計(jì)算機(jī)系統(tǒng),2004,25(2):287-290.

[7] 蘆鴻雁.基于層次包圍盒的碰撞檢測算法研究[J].計(jì)算機(jī)與數(shù)字工程,2008,36(2):23-25.

[8] 李運(yùn)鋒,劉修國.基于方向包圍盒投影轉(zhuǎn)換的輪廓線拼接算法[J].計(jì)算機(jī)應(yīng)用,2011,31(12):3353-3356.

[9] CIRNE M V M,PEDRINI H.Marching cubes technique for volumetric visualization accelerated with graphics processing units[J].Journal of the Brazilian Computer Society,2013,19(3):223-233.

[10] WATSON B,LUEBKE D.The ultimate display:where will all the pixels come from[J].Computer,2005,38(8):54-61.

[11] 韓俊剛,蔣 林,杜慧敏,等.一種圖形加速器和著色器的體系結(jié)構(gòu)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2010,22(3):363-372.

[12] 黃 龍.基于GLSL三維渲染效果的研究與應(yīng)用[D].西安:西安科技大學(xué),2014.

[13] WOO J H,SOHN J H,KIM H,et al.A 195 mW,9.1M vertices/s fully programmable 3-D graphics processor for low power mobile devices[J].IEEE Journal of Solid-State Circuits,2008,43(11):2370-2380.

[14] 陳繼選,王毅剛.基于OSG的GLSL著色器編輯環(huán)境[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(3):153-156.

[15] WOLF D.OpenGL4.0 shading language cookbook[M].[s.l.]:PACKT Publishing,2011.

猜你喜歡
頂點(diǎn)基準(zhǔn)線性
二階整線性遞歸數(shù)列的性質(zhì)及應(yīng)用
過非等腰銳角三角形頂點(diǎn)和垂心的圓的性質(zhì)及應(yīng)用(下)
過非等腰銳角三角形頂點(diǎn)和垂心的圓的性質(zhì)及應(yīng)用(上)
線性回歸方程的求解與應(yīng)用
淺談機(jī)械制造加工中的基準(zhǔn)
不相交線性碼的一種新構(gòu)造*
應(yīng)如何確定行政處罰裁量基準(zhǔn)
非齊次線性微分方程的常數(shù)變易法
滑落還是攀爬
燃?xì)廨啓C(jī)燃燒基準(zhǔn)溫度估算方法