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

基于GPU的自適應(yīng)曲面細(xì)分方法與流程

文檔序號(hào):12722816閱讀:484來(lái)源:國(guó)知局
基于GPU的自適應(yīng)曲面細(xì)分方法與流程

本發(fā)明屬于計(jì)算機(jī)圖形學(xué)領(lǐng)域,涉及一種基于GPU的自適應(yīng)曲面細(xì)分方法。



背景技術(shù):

隨著現(xiàn)代工業(yè)的發(fā)展,計(jì)算機(jī)輔助與制造發(fā)展迅速,其技術(shù)水平的發(fā)展已成為一個(gè)國(guó)家現(xiàn)代化水平的重要標(biāo)志。其中計(jì)算機(jī)輔助幾何設(shè)計(jì)(Computer Aided Geometric Design簡(jiǎn)稱為CAGD)是對(duì)外形方面的幾何信息的計(jì)算機(jī)表示,現(xiàn)在已經(jīng)是計(jì)算機(jī)應(yīng)用學(xué)科的一個(gè)重要分支。

由于計(jì)算機(jī)離散化表示數(shù)據(jù),計(jì)算機(jī)不能直接生成曲線,當(dāng)然更不能直接生成曲面。我們?cè)谟?jì)算機(jī)屏幕上看到的曲線、曲面實(shí)際上是由無(wú)數(shù)個(gè)多邊形構(gòu)成的。當(dāng)然多邊形越多,那么曲面就會(huì)展現(xiàn)的更為真實(shí)。要得到精細(xì)的效果,需要提供包含大量控制點(diǎn)的實(shí)體模型,稱之為高模模型,但這給模型設(shè)計(jì)帶來(lái)了大量的工作量,提高了人力成本。

曲面細(xì)分技術(shù),是一種化繁為簡(jiǎn)的手段,在模型已有的表面上細(xì)分出頂點(diǎn),逐步逼近理想曲面。1978年Edwin Catmull和Jim Clark提出經(jīng)典的Catmull-Clark曲面細(xì)分算法,由于該算法的遞歸特性不適用于GPU編程,基于三角形的Loop細(xì)分算法也不適用GPU編程。近些年一大批適用于GPU編程的曲面細(xì)分算法被提出,比如:2008年CHARLES LOOP和SCOTT SCHAEFER兩人于2008年提出了一種近似Catmull-Clark細(xì)分面的算法、同年Tamy Boubekeur提出的Phong細(xì)分算法。由于細(xì)分曲面的頂點(diǎn)和面數(shù)以指數(shù)速度增長(zhǎng),繪制速度會(huì)隨細(xì)分深度增加而迅速降低,所以在GPU技術(shù)出現(xiàn)之前細(xì)分曲面技術(shù)難以實(shí)用,直到由ATI公司基于GPU開發(fā)應(yīng)用了曲面細(xì)分之后,曲面細(xì)分技術(shù)得以在工業(yè)設(shè)計(jì)、計(jì)算機(jī)動(dòng)畫和雕塑曲面等的設(shè)計(jì)加工中被廣泛應(yīng)用和研究。

現(xiàn)存的細(xì)分方法,隨著細(xì)分的進(jìn)行,頂點(diǎn)和邊的數(shù)量會(huì)急劇增加,所以對(duì)龐大復(fù)雜的網(wǎng)格模型進(jìn)行細(xì)分時(shí),將耗費(fèi)大量的存儲(chǔ)資源和運(yùn)算資源。同時(shí)對(duì)后續(xù)的顯示、傳輸或者數(shù)控加工編程增加負(fù)擔(dān)。而實(shí)際情況是,在細(xì)分迭代數(shù)次后,某些區(qū)域(如較平坦部分或者初始控制網(wǎng)格較稠密的部分)其控制網(wǎng)格已較好地逼近極限細(xì)分曲面,而在另外一些區(qū)域(如曲率變化較大的部分)其控制網(wǎng)格還比較粗糙,需要繼續(xù)細(xì)分。為了減少不必要的計(jì)算資源的浪費(fèi),自適應(yīng)的曲面細(xì)分算法就很重要了。根據(jù)給定的局部細(xì)分準(zhǔn)則,對(duì)整個(gè)控制網(wǎng)格上進(jìn)行局部細(xì)分,力求以規(guī)模較小的網(wǎng)格來(lái)表示精度較高的細(xì)分曲面,這對(duì)于擴(kuò)大細(xì)分曲面的應(yīng)用具有重要的工程意義。

基于以上背景,基于GPU的自適應(yīng)曲面細(xì)分方法提出了一種自適應(yīng)策略,將有效的解決曲面光滑度和數(shù)據(jù)量之間的矛盾,使得在保證曲面細(xì)分顯示效果的前提下提高渲染幀率。采取了兩種基于三角形面片的細(xì)分模式:PN三角形和Phong細(xì)分進(jìn)行驗(yàn)證,實(shí)驗(yàn)證明,基于GPU的自適應(yīng)曲面細(xì)分方法具有很好的現(xiàn)實(shí)和理論意義。



技術(shù)實(shí)現(xiàn)要素:

發(fā)明目的:以有效的解決曲面光滑度和數(shù)據(jù)量之間的矛盾,使得在提高顯示效果的前提下提高渲染幀率。

本發(fā)明包括:至少支持Directx11的GPU。

基于GPU的自適應(yīng)曲面細(xì)分方法;其特征在于,在計(jì)算機(jī)中是依次按以下步驟實(shí)現(xiàn)的:

步驟(1),Directx11初始化

具體包括:

1、設(shè)置輸入布局,添加POSITION和NORMAL兩個(gè)頂點(diǎn)語(yǔ)義。

2、設(shè)置常量緩沖區(qū),與GPU中HLSL常量緩沖區(qū)對(duì)應(yīng)

步驟(2),讀取網(wǎng)格模型數(shù)據(jù)與初始化頂點(diǎn)緩存:

在Directx11中集成了曲面細(xì)分管線,在GPU中實(shí)現(xiàn)PN三角形細(xì)分策略時(shí),對(duì)于每一個(gè)三角形面片,由三個(gè)控制點(diǎn)生成一個(gè)有10個(gè)控制點(diǎn)的3階貝塞爾三角形。在GPU中實(shí)現(xiàn)Phong細(xì)分算法時(shí),對(duì)于每一個(gè)三角形面片,需要知道每個(gè)頂點(diǎn)的法向量。在自定義頂點(diǎn)結(jié)構(gòu)中定義頂點(diǎn)的相關(guān)屬性,PN三角形細(xì)分策略與Phong細(xì)分策略頂點(diǎn)格式相同,都包含一個(gè)坐標(biāo)信息和法向量信息。

步驟(3),創(chuàng)建頂點(diǎn)布局:

在自定義頂點(diǎn)結(jié)構(gòu)中定義頂點(diǎn)的相關(guān)屬性,PN三角形細(xì)分策略與Phong細(xì)分策略頂點(diǎn)格式相同,都包含一個(gè)坐標(biāo)信息和法向量信息。

步驟(4),網(wǎng)格渲染:

為了能啟用Directx11的細(xì)分階段,設(shè)置Input Assembler的圖元拓?fù)漕愋?,使其接收的是控制面片的結(jié)構(gòu),用IASetPrimitiveTopology設(shè)置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式讀取頂點(diǎn)緩存。

步驟(5),自適應(yīng)曲面細(xì)分:

準(zhǔn)備好頂點(diǎn)緩沖后,在GPU中實(shí)現(xiàn)曲面細(xì)分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST組裝方式對(duì)輸入的頂點(diǎn)緩沖進(jìn)行讀取。在Directx11中,曲面細(xì)分階段分為三個(gè)管線,分別為Hull著色階段,Tessellator階段以及Domain著色階段。其中,Hull著色階段由兩部分構(gòu)成,分別對(duì)應(yīng)兩個(gè)不同的hlsl程序,分別為Hull著色階段和patch靜態(tài)函數(shù)。在patch靜態(tài)函數(shù)中決定了曲面片的細(xì)分程度,從而告知Tessellator階段要細(xì)分出多少頂點(diǎn)。

第一步:在patch靜態(tài)函數(shù)中,進(jìn)行自適應(yīng)曲面細(xì)分算法的實(shí)現(xiàn)。自適應(yīng)策略包括:背部剔除、距離自適應(yīng)、垂直面自適應(yīng)及面片大小自適應(yīng)。計(jì)算出面片的細(xì)分因子后,需要進(jìn)行裂縫消除。

背部剔除:

在進(jìn)行計(jì)算細(xì)分因子之前,先做背部剔除測(cè)試,對(duì)于沒有通過(guò)背部剔除測(cè)試的面片,只需要把該面片的每一條邊的曲面細(xì)分因子置為0,那么渲染管線將不再渲染該面片。對(duì)于一個(gè)給定的三角形面片,對(duì)于每一條邊,計(jì)算公式如下:

其中edgedot為點(diǎn)積結(jié)果,Nj,Nk表示三角形面片中任意兩個(gè)頂點(diǎn)的組合,V為視向量。對(duì)于左手坐標(biāo)系,若該結(jié)果為負(fù)值,說(shuō)明該面片的這條邊為背向。當(dāng)一個(gè)面片的三條邊都為背向時(shí)說(shuō)明該面片為背向。

距離自適應(yīng):

基于距離自適應(yīng)的細(xì)分因子計(jì)算公式如下:

Factor1=1-(Dis-minDis)/disFrange

其中,Dis表示視點(diǎn)與面片邊中點(diǎn)的距離,minDis表示使用最大細(xì)分因子的最小距離。disFrange表示近平面與遠(yuǎn)平面之間的距離,F(xiàn)actor1為使用距離自適應(yīng)策略得到的調(diào)節(jié)因子這兩個(gè)參數(shù)大小用戶可以設(shè)定,對(duì)于不同的物體模型,取值不同。最終可以得到的Factor1的值位于[0,1]之間。

得到調(diào)節(jié)因子后,使用線性差值公式:

x1=1+Factor*(x-1)

其中,x1為使用距離自適應(yīng)策略調(diào)解后的細(xì)分因子大小,x為初始細(xì)分因子大小。垂直面自適應(yīng):

一個(gè)面片如果與視線方向保持近似垂直時(shí),由于3D場(chǎng)景在2D屏幕上顯示時(shí)需要進(jìn)行投影,對(duì)于這樣的面片進(jìn)行細(xì)分視覺效果變化不大,因此適當(dāng)減小細(xì)分因子。對(duì)于每一個(gè)面片處理如下:

其中edgedot為點(diǎn)積結(jié)果,Nj,Nk表示三角形面片中任意兩個(gè)頂點(diǎn)的組合,V為視向量。其中edgedot為歸一化后的兩個(gè)向量之間的乘積。

根據(jù)公式:

Factor2=1-|edgedot|

同樣使用線性插值公式:

x2=1+Factor2*(x1-1)

其中,F(xiàn)actor2為使用垂直面自適應(yīng)策略得到的調(diào)節(jié)因子。x2為經(jīng)過(guò)垂直面自適應(yīng)策略調(diào)解后得到的細(xì)分因子大小,x1使用距離自適應(yīng)策略調(diào)解后的細(xì)分因子大小面片大小自適應(yīng):

對(duì)于模型中的面片首先根據(jù)面片的每一條邊進(jìn)行細(xì)分因子的動(dòng)態(tài)計(jì)算。對(duì)于一個(gè)給定的面片,計(jì)算公式如下:

其中,P1,P2表示三角形面片的任意兩點(diǎn)。D表示用戶給定的距離大小。Factor3為求得的調(diào)節(jié)因子。

得到調(diào)節(jié)因子Factor3后,同樣使用線性差值公式:

x3=1+Factor3*(x2-1)

其中,x3為面片大小自適應(yīng)策略調(diào)解后的細(xì)分因子大小,x2為經(jīng)過(guò)垂直面自適應(yīng)策略調(diào)解后得到的細(xì)分因子大小

裂縫消除:

對(duì)于相鄰三角形的相鄰邊,設(shè)置該邊的細(xì)分因子為相鄰三角形中最大的細(xì)分因子。

三角形ABC,與三角形ACD相鄰,AC為共享邊,XAC表示邊AC的細(xì)分因子大小。為三角形ABC中AC邊的細(xì)分因子大小,為三角形ACD邊AC邊的細(xì)分因子大小。

第二步:hull著色程序,對(duì)每個(gè)輸出控制點(diǎn)執(zhí)行一次,設(shè)置細(xì)分domain為三角形,輸出控制點(diǎn)的數(shù)量為3,并指定patch函數(shù)為第二步中的patch函數(shù)。

第三步:domain著色程序,在該程序中分別實(shí)現(xiàn)了PN三角形細(xì)分策略及Phong細(xì)分策略。

使用PN三角形細(xì)分策略時(shí),對(duì)于給定u,v,w,u+v+w=1,使用三階貝塞爾三角形公式:

求出細(xì)分得到的頂點(diǎn)的三維坐標(biāo)。

使用二階貝塞爾三角形公式得到各個(gè)頂點(diǎn)的法向量。公式如下:

對(duì)于給定的uvw坐標(biāo),求出頂點(diǎn)的法向量。

使用Phong細(xì)分模式時(shí),三角形面片的控制點(diǎn)為:pl,pm和pn,各個(gè)頂點(diǎn)對(duì)應(yīng)的法向量分別為nl,nm和nn。對(duì)于給定的uvw坐標(biāo),使用以下公式:

其中,

p(u,v,w)=pl*u+pm*v+pn*w

令q=p(u,v,w),那么:

πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl

πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm

πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn

T表示轉(zhuǎn)置;

即可求出細(xì)分得到的頂點(diǎn)的三維坐標(biāo)。

本發(fā)明使用Directxll編程工具,基于距離自適應(yīng)、垂直面自適應(yīng)、面片大小自適應(yīng)及背部剔除四種自適應(yīng)策略,實(shí)現(xiàn)了曲面細(xì)分的自適應(yīng)方法。對(duì)于每個(gè)面片,基于四種策略做細(xì)分因子的計(jì)算,因此可以動(dòng)態(tài)的根據(jù)不同的三角形面片的特征調(diào)整每個(gè)三角形面片的細(xì)分因子大小。從而有效的解決了曲面光滑度與數(shù)據(jù)量之間的矛盾。

附圖說(shuō)明

圖1為物體模型的網(wǎng)格圖

圖2為模型在細(xì)分因子為9是的網(wǎng)格圖

圖3為模型結(jié)果俯視圖

圖4為模型在細(xì)分因子為9時(shí)的渲染結(jié)果俯視圖

圖5為模型在細(xì)分因子為9時(shí)的使用面片大小自適應(yīng)策略的渲染結(jié)果俯視圖

圖6為模型在細(xì)分因子為9時(shí)的使用距離自適應(yīng)策略的渲染結(jié)果俯視圖

圖7為模型在細(xì)分因子為9時(shí)的使用垂直面自適應(yīng)策略的渲染結(jié)果俯視圖

圖8為模型在細(xì)分因子為9時(shí)的使用面片大小自適應(yīng)策略的渲染結(jié)果圖

圖9為模型在細(xì)分因子為9時(shí)的使用距離自適應(yīng)策略的渲染結(jié)果圖

圖10為模型在細(xì)分因子為9時(shí)的使用垂直面自適應(yīng)策略的渲染結(jié)果圖

圖11為模型在細(xì)分因子為9時(shí)的使用背部剔除測(cè)試的渲染結(jié)果圖

圖12為為模型在細(xì)分因子為9時(shí),未使用自適應(yīng)策略渲染結(jié)果圖

圖13為基于GPU的自適應(yīng)曲面細(xì)分方法的總體流程圖

圖14為在計(jì)算細(xì)分因子時(shí)使用自適應(yīng)策略流程圖

圖15為相同邊由于不同大小的細(xì)分因子導(dǎo)致的裂縫的效果圖

圖16為使用裂縫消除策略后的效果圖

具體實(shí)施方式

下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的說(shuō)明。

圖13,14是本發(fā)明的流程圖,在計(jì)算機(jī)中按如下步驟進(jìn)行:

1、基于GPU的自適應(yīng)曲面細(xì)分方法;其特征在于,在計(jì)算機(jī)中是依次按以下步驟實(shí)現(xiàn)的:

步驟(1),Directx11初始化

具體包括:

3、設(shè)置輸入布局,添加POSITION和NORMAL兩個(gè)頂點(diǎn)語(yǔ)義。

4、設(shè)置常量緩沖區(qū),與GPU中HLSL常量緩沖區(qū)對(duì)應(yīng)

步驟(2),讀取網(wǎng)格模型數(shù)據(jù)與初始化頂點(diǎn)緩存:

在Directx11中集成了曲面細(xì)分管線,在GPU中實(shí)現(xiàn)PN三角形細(xì)分策略時(shí),對(duì)于每一個(gè)三角形面片,由三個(gè)控制點(diǎn)生成一個(gè)有10個(gè)控制點(diǎn)的3階貝塞爾三角形。在GPU中實(shí)現(xiàn)Phong細(xì)分算法時(shí),對(duì)于每一個(gè)三角形面片,需要知道每個(gè)頂點(diǎn)的法向量。在自定義頂點(diǎn)結(jié)構(gòu)中定義頂點(diǎn)的相關(guān)屬性,PN三角形細(xì)分策略與Phong細(xì)分策略頂點(diǎn)格式相同,都包含一個(gè)坐標(biāo)信息和法向量信息。

步驟(3),創(chuàng)建頂點(diǎn)布局:

在自定義頂點(diǎn)結(jié)構(gòu)中定義頂點(diǎn)的相關(guān)屬性,PN三角形細(xì)分策略與Phong細(xì)分策略頂點(diǎn)格式相同,都包含一個(gè)坐標(biāo)信息和法向量信息。

步驟(4),網(wǎng)格渲染:

為了能啟用Directx11的細(xì)分階段,設(shè)置Input Assembler的圖元拓?fù)漕愋?,使其接收的是控制面片的結(jié)構(gòu),用IASetPrimitiveTopology設(shè)置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式讀取頂點(diǎn)緩存。

步驟(5),自適應(yīng)曲面細(xì)分:

準(zhǔn)備好頂點(diǎn)緩沖后,在GPU中實(shí)現(xiàn)曲面細(xì)分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST組裝方式對(duì)輸入的頂點(diǎn)緩沖進(jìn)行讀取。在Directx11中,曲面細(xì)分階段分為三個(gè)管線,分別為Hull著色階段,Tessellator階段以及Domain著色階段。其中,Hull著色階段由兩部分構(gòu)成,分別對(duì)應(yīng)兩個(gè)不同的hlsl程序,分別為Hull著色階段和patch靜態(tài)函數(shù)。在patch靜態(tài)函數(shù)中決定了曲面片的細(xì)分程度,從而告知Tessellator階段要細(xì)分出多少頂點(diǎn)。

第一步:在patch靜態(tài)函數(shù)中,進(jìn)行自適應(yīng)曲面細(xì)分算法的實(shí)現(xiàn)。自適應(yīng)策略包括:背部剔除、距離自適應(yīng)、垂直面自適應(yīng)及面片大小自適應(yīng)。計(jì)算出面片的細(xì)分因子后,需要進(jìn)行裂縫消除。

背部剔除:

在進(jìn)行計(jì)算細(xì)分因子之前,先做背部剔除測(cè)試,對(duì)于沒有通過(guò)背部剔除測(cè)試的面片,只需要把該面片的每一條邊的曲面細(xì)分因子置為0,那么渲染管線將不再渲染該面片。對(duì)于一個(gè)給定的三角形面片,對(duì)于每一條邊,計(jì)算公式如下:

其中edgedot為點(diǎn)積結(jié)果,Nj,Nk表示三角形面片中任意兩個(gè)頂點(diǎn)的組合,V為視向量。對(duì)于左手坐標(biāo)系,若該結(jié)果為負(fù)值,說(shuō)明該面片的這條邊為背向。當(dāng)一個(gè)面片的三條邊都為背向時(shí)說(shuō)明該面片為背向。

距離自適應(yīng):

基于距離自適應(yīng)的細(xì)分因子計(jì)算公式如下:

Factor1=1-(Dis-minDis)/disFrange

其中,Dis表示視點(diǎn)與面片邊中點(diǎn)的距離,minDis表示使用最大細(xì)分因子的最小距離。disFrange表示近平面與遠(yuǎn)平面之間的距離,F(xiàn)actor1為使用距離自適應(yīng)策略得到的調(diào)節(jié)因子這兩個(gè)參數(shù)大小用戶可以設(shè)定,對(duì)于不同的物體模型,取值不同。最終可以得到的Factor1的值位于[0,1]之間。

得到調(diào)節(jié)因子后,使用線性差值公式:

x1=1+Factor*(x-1)

其中,x1為使用距離自適應(yīng)策略調(diào)解后的細(xì)分因子大小,x為初始細(xì)分因子大小。垂直面自適應(yīng):

一個(gè)面片如果與視線方向保持近似垂直時(shí),由于3D場(chǎng)景在2D屏幕上顯示時(shí)需要進(jìn)行投影,對(duì)于這樣的面片進(jìn)行細(xì)分視覺效果變化不大,因此適當(dāng)減小細(xì)分因子。對(duì)于每一個(gè)面片處理如下:

其中edgedot為點(diǎn)積結(jié)果,Nj,Nk表示三角形面片中任意兩個(gè)頂點(diǎn)的組合,V為視向量。其中edgedot為歸一化后的兩個(gè)向量之間的乘積。

根據(jù)公式:

Factor2=1-|edgedot|

同樣使用線性插值公式:

x2=1+Factor2*(x1-1)

其中,F(xiàn)actor2為使用垂直面自適應(yīng)策略得到的調(diào)節(jié)因子。x2為經(jīng)過(guò)垂直面自適應(yīng)策略調(diào)解后得到的細(xì)分因子大小,x1使用距離自適應(yīng)策略調(diào)解后的細(xì)分因子大小面片大小自適應(yīng):

對(duì)于模型中的面片首先根據(jù)面片的每一條邊進(jìn)行細(xì)分因子的動(dòng)態(tài)計(jì)算。對(duì)于一個(gè)給定的面片,計(jì)算公式如下:

其中,P1,P2表示三角形面片的任意兩點(diǎn)。D表示用戶給定的距離大小。Factor3為求得的調(diào)節(jié)因子。

得到調(diào)節(jié)因子Factor3后,同樣使用線性差值公式:

x3=1+Factor3*(x2-1)

其中,x3為面片大小自適應(yīng)策略調(diào)解后的細(xì)分因子大小,x2為經(jīng)過(guò)垂直面自適應(yīng)策略調(diào)解后得到的細(xì)分因子大小

裂縫消除:

對(duì)于相鄰三角形的相鄰邊,設(shè)置該邊的細(xì)分因子為相鄰三角形中最大的細(xì)分因子。

三角形ABC,與三角形ACD相鄰,AC為共享邊,XAC表示邊AC的細(xì)分因子大小。為三角形ABC中AC邊的細(xì)分因子大小,為三角形ACD邊AC邊的細(xì)分因子大小。

第二步:hull著色程序,對(duì)每個(gè)輸出控制點(diǎn)執(zhí)行一次,設(shè)置細(xì)分domain為三角形,輸出控制點(diǎn)的數(shù)量為3,并指定patch函數(shù)為第二步中的patch函數(shù)。

第三步:domain著色程序,在該程序中分別實(shí)現(xiàn)了PN三角形細(xì)分策略及Phong細(xì)分策略。

使用PN三角形細(xì)分策略時(shí),對(duì)于給定u,v,w,u+v+w=1,使用三階貝塞爾三角形公式:

求出細(xì)分得到的頂點(diǎn)的三維坐標(biāo)。

使用二階貝塞爾三角形公式得到各個(gè)頂點(diǎn)的法向量。公式如下:

對(duì)于給定的uvw坐標(biāo),求出頂點(diǎn)的法向量。

使用Phong細(xì)分模式時(shí),三角形面片的控制點(diǎn)為:pl,pm和pn,各個(gè)頂點(diǎn)對(duì)應(yīng)的法向量分別為nl,nm和nn。對(duì)于給定的uvw坐標(biāo),使用以下公式:

其中,

p(u,v,w)=pl*u+pm*v+pn*w

令q=p(u,v,w),那么:

πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl

πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm

πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn

T表示轉(zhuǎn)置;

即可求出細(xì)分得到的頂點(diǎn)的三維坐標(biāo)。

經(jīng)過(guò)以上步驟后,實(shí)現(xiàn)了基于GPU的自適應(yīng)曲面細(xì)分方法,圖2展示了物體模型在進(jìn)行曲面細(xì)分后的顯示效果,與圖1相比,可以看出在原有的控制點(diǎn)的基礎(chǔ)上,新生成了大量的新的控制點(diǎn)。圖4與圖3相比,細(xì)分后的結(jié)果面片更加光滑。圖7中展示了使用垂直面自適應(yīng)策略時(shí)的俯視圖,因?yàn)槭歉┮晥D,所以該面近似與視線方向垂直,因此結(jié)果圖與圖4結(jié)果類似。圖8,9及10分別展示了使用不同自適應(yīng)策略后的渲染效果。圖15為產(chǎn)生裂縫示意圖,圖16為消除裂縫示意圖。如果所示,左側(cè)三角形細(xì)分每個(gè)邊的細(xì)分因子都為4,右側(cè)三角形每條邊的細(xì)分因子都為3,所以在共享邊上產(chǎn)生了裂縫,使用裂縫消除算法解決該問(wèn)題,右側(cè)三角形的共享邊細(xì)分因子取4,其他邊保持不變,如圖16 所示,消除了裂縫。為驗(yàn)證自適應(yīng)算法的有效性,本文對(duì)各個(gè)自適應(yīng)策略分別做了實(shí)驗(yàn),并從客觀指標(biāo)幀率(FPS)對(duì)其驗(yàn)證,幀率越高表示繪制場(chǎng)景需要的資源更少,幀率的提升反映了自適應(yīng)曲面細(xì)分的有效性(實(shí)驗(yàn)機(jī)器的配置:NVIDIA Quadro K600圖形卡),結(jié)果如下:

背部消隱測(cè)試

表1

距離自適應(yīng)測(cè)試

表2

表3

垂直面自適應(yīng)

表4

面片大小自適應(yīng)

表5

從表1-5可以看出,隨著細(xì)分因子的增大,繪制的面片的增加,使用自適應(yīng)策略后,能大幅度提升幀率。此外,結(jié)合圖8,9,10,11及12可以看出,在渲染效果幾乎相同的情況下,使用自適應(yīng)曲面細(xì)分方法能大幅度提升幀率。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
淳化县| 图片| 峨山| 江西省| 万源市| 枣阳市| 孝感市| 宁南县| 横峰县| 南澳县| 阿拉善右旗| 忻州市| 安顺市| 海盐县| 城口县| 股票| 巢湖市| 濮阳市| 澄城县| 南宫市| 深圳市| 宜丰县| 汉源县| 阿拉善右旗| 黑山县| 寻乌县| 龙门县| 资阳市| 玉门市| 平乡县| 山阴县| 双鸭山市| 瑞安市| 绥棱县| 交城县| 彭阳县| 和静县| 拉孜县| 天全县| 榆社县| 叶城县|