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

?

基于區(qū)域增長(zhǎng)和三角分割的局部紋理映射算法

2012-06-05 03:21:02申世恒李柏巖劉曉強(qiáng)王府梅
關(guān)鍵詞:基準(zhǔn)面剖分切線

申世恒, 李柏巖, 劉曉強(qiáng), 王府梅, 宋 暉

(1.東華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 201620;2.東華大學(xué) 紡織學(xué)院,上海 201620)

在進(jìn)行三維虛擬物體展示時(shí),通常采用真實(shí)二維圖像作為貼圖,通過(guò)紋理映射技術(shù)將其映射到三維物體模型表面,從而增強(qiáng)三維場(chǎng)景中虛擬物體的真實(shí)感。紋理映射通常是針對(duì)一個(gè)對(duì)象,整體進(jìn)行映射的,但在一些情況下,紋理映射只針對(duì)對(duì)象上一個(gè)小區(qū)域進(jìn)行,稱局部紋理映射。例如,在進(jìn)行織物虛擬展示時(shí),需要對(duì)展示物指定位置進(jìn)行局部修飾、添加提花圖案等。

針對(duì)如何將一張貼圖恰當(dāng)?shù)赜成涞饺S模型指定的局部區(qū)域的問(wèn)題,文獻(xiàn)[1]提出了基于極坐標(biāo)的方法,以三維物體上一點(diǎn)為中心,在保證與其鄰接點(diǎn)的方向和距離不變的情況下,求出鄰近點(diǎn)的紋理坐標(biāo),并以鄰接點(diǎn)為中心點(diǎn),繼續(xù)向周圍鄰接點(diǎn)進(jìn)行擴(kuò)展,保證紋理不會(huì)發(fā)生嚴(yán)重的扭曲;文獻(xiàn)[2-3]提出中心擴(kuò)散的方式,以一個(gè)種子面開始,采用廣度優(yōu)先搜索方法擴(kuò)散確定局部映射區(qū)域,該方法需手動(dòng)控制映射區(qū)域,不能自動(dòng)控制紋理映射區(qū)域,并且在局部細(xì)節(jié)處理上效果不太理想;文獻(xiàn)[4-6]提出基于中間面的方法,通過(guò)控制中間面,達(dá)到局部紋理映射的效果。該方法對(duì)于規(guī)則化的三維物體能給出很好的映射效果,但對(duì)于非參數(shù)化的不規(guī)則三維物體則不能保證很好的映射。關(guān)于紋理合成方法,文獻(xiàn)[7]提出一個(gè)快速有效的紋理合成方法,為局部紋理映射提供一種很好的拼接方法;文獻(xiàn)[8]提出一種圖像修復(fù)算法,實(shí)現(xiàn)對(duì)紋理失真的修復(fù)。

三維模型一般采用三角面為基本單位來(lái)進(jìn)行逼近模擬。本文也以三角面為基本的映射單位,通過(guò)選定一個(gè)基準(zhǔn)點(diǎn),構(gòu)建一個(gè)基準(zhǔn)面,采用向周圍點(diǎn)進(jìn)行擴(kuò)張的方式,確定局部映射區(qū)域。對(duì)于相對(duì)較大的三角面片,采用一定的算法對(duì)其進(jìn)行分割,以控制區(qū)域映射有效范圍,防止過(guò)度映射的出現(xiàn)。

1 頂點(diǎn)紋理坐標(biāo)化

為將紋理映射到三維模型上,首先需要給模型的每一個(gè)頂點(diǎn)都分配一個(gè)合適的紋理坐標(biāo)。本文采用平面展開法,即通過(guò)選定基準(zhǔn)點(diǎn),并以此基準(zhǔn)點(diǎn)所在平面作為一個(gè)基準(zhǔn)面,將此基準(zhǔn)面周圍包含基準(zhǔn)面頂點(diǎn)的三角面展平到此平面上,再計(jì)算每個(gè)頂點(diǎn)到基準(zhǔn)點(diǎn)的距離和方向,實(shí)現(xiàn)三維頂點(diǎn)的紋理坐標(biāo)化。

假設(shè)三角面PAB以頂點(diǎn)P為原點(diǎn),對(duì)應(yīng)紋理中心坐標(biāo)點(diǎn),以頂點(diǎn)P所在的一個(gè)面(設(shè)為T)為基準(zhǔn)面。對(duì)于所有包含頂點(diǎn)P的面上的頂點(diǎn),利用下面介紹的方法,計(jì)算出各個(gè)點(diǎn)所對(duì)應(yīng)的紋理坐標(biāo)。

選取包含頂點(diǎn)P的三角面T作為基準(zhǔn)面,搜索模型中所有包含頂點(diǎn)P的面,對(duì)于其中任意一個(gè)面,及其面上的非P點(diǎn)的頂點(diǎn)A,計(jì)算出向量在平面T上的投影點(diǎn)A′,以及向量的模,然后利用、向量,以及用于控制紋理方向的紋理正向向量Qmap,求出A點(diǎn)的紋理坐標(biāo)。而對(duì)于三角面上另一頂點(diǎn)B,可以計(jì)算向量之間的角度α以及的模,即可以利用α求出B點(diǎn)在平面T上所對(duì)應(yīng)的B′及其紋理坐標(biāo)。通過(guò)已計(jì)算出紋理坐標(biāo)的頂點(diǎn),再以此頂點(diǎn)所在面為基準(zhǔn)面,此點(diǎn)為基準(zhǔn)點(diǎn),采用相同的方法計(jì)算出其周圍頂點(diǎn)的紋理坐標(biāo),實(shí)現(xiàn)頂點(diǎn)紋理坐標(biāo)化。

首先需要確定用于紋理映射的基準(zhǔn)平面。假設(shè)用來(lái)確定基準(zhǔn)平面的方程為:

已知A點(diǎn)坐標(biāo)(x1,y1,z1),面法向量為(a,b,c),設(shè)A′坐標(biāo)為(x2,y2,z2)。通過(guò)求解聯(lián)立方程,即

可以得出i,從而求得A′的三維坐標(biāo)(x2,y2,z2)。

其次計(jì)算模型上相關(guān)點(diǎn)的紋理坐標(biāo)。通過(guò)計(jì)算點(diǎn)A′在平面T的坐標(biāo),可以計(jì)算向量,假設(shè)與紋理正向向量Q夾角為θ,通過(guò)余弦

map定理可求出夾角的正弦與余弦值,即

2 確定映射區(qū)域

確定映射區(qū)域是實(shí)現(xiàn)局部紋理映射的關(guān)健。通過(guò)上述方法,可以將三維點(diǎn)展平在一個(gè)平面內(nèi),并計(jì)算出各點(diǎn)對(duì)應(yīng)的紋理坐標(biāo)。在這個(gè)平面內(nèi),以原點(diǎn)為圓心,紋理半徑R做圓,圓內(nèi)覆蓋的面,即為所要進(jìn)行映射的面。其中R的大小可在交互操作時(shí)由用戶確定,同時(shí)為了避免重復(fù)計(jì)算,通過(guò)記錄已映射的點(diǎn)與面,在進(jìn)行映射域擴(kuò)展過(guò)程中,對(duì)新擴(kuò)展的面進(jìn)行判斷,以使計(jì)算工作量最少。算法過(guò)程如下:

(1)建立容器V-Vert、V-Face和V-In,分別用來(lái)存儲(chǔ)已坐標(biāo)化的點(diǎn)、已映射的面和包含在映射范圍內(nèi)的點(diǎn)。選擇一個(gè)初始點(diǎn)作為中心點(diǎn),加入到V-Vert中,并將此初始點(diǎn)紋理坐標(biāo)設(shè)為(0.5,0.5),并添加到 V-In中。

(2)搜索V-Vert,采用寬度優(yōu)先搜索法,當(dāng)V-Vert不為空時(shí),取其中的第1個(gè)點(diǎn)。

(3)如果這個(gè)點(diǎn)在V-In中,對(duì)包含此點(diǎn)的面,若該面不在V-Face中,則利用前面介紹的方法,對(duì)面上的點(diǎn)進(jìn)行紋理坐標(biāo)化,并將這個(gè)面中沒(méi)有出現(xiàn)在V-Vert中的頂點(diǎn)加入其中,將該面加入V-Face中。對(duì)于任意一個(gè)已經(jīng)進(jìn)行了紋理坐標(biāo)化的頂點(diǎn),記其紋理坐標(biāo)為(xv,yv),如果該紋理坐標(biāo)滿足公式R,則將該點(diǎn)加入容器V-In中。

(4)如果這個(gè)點(diǎn)不在V-In中,對(duì)于包含此點(diǎn)的面,若該面不在V-Face中,則進(jìn)行映射,并對(duì)面上其余點(diǎn)進(jìn)行紋理坐標(biāo)化,并把這些點(diǎn)加入V-Vert,把含有選定點(diǎn)的面記入V-Face。

(5)將該點(diǎn)從 V-Vert中刪除,返回步驟(2)。

重復(fù)執(zhí)行步驟(2)~(5),直至 V-Vert為空。根據(jù)這個(gè)方法,可以避免重復(fù)計(jì)算,并將紋理映射范圍圈定在一個(gè)合理的范圍之內(nèi),以達(dá)到一個(gè)較好的局部紋理映射效果。

在進(jìn)行上述步驟的過(guò)程中,為避免將三角形都展開在一個(gè)平面所帶來(lái)的變形問(wèn)題,本文采用局部平面展平法。對(duì)于選定的一個(gè)點(diǎn),以其所在的一個(gè)平面作為基準(zhǔn)面,對(duì)每一個(gè)包含此點(diǎn)的三角面,取其法向量,并求取這些法向量的平均值作為法向量,并基于此點(diǎn)做基準(zhǔn)面[2],然后將各個(gè)三角面展平到此基準(zhǔn)面上。利用上述方法進(jìn)行擴(kuò)展后,對(duì)于每一個(gè)擴(kuò)展后并被選為新的基準(zhǔn)點(diǎn)的點(diǎn),以此點(diǎn)所在的一個(gè)平面為新的基準(zhǔn)面,再將包含此點(diǎn)的三角面依次展平到此基準(zhǔn)面上。如此循環(huán),直到滿足上述條件中的終止條件為止。

通過(guò)局部展平法,對(duì)于每一個(gè)點(diǎn)計(jì)算出來(lái)的紋理坐標(biāo),其到達(dá)基準(zhǔn)點(diǎn)紋理坐標(biāo)的距離為絕對(duì)距離,其到達(dá)中心點(diǎn)坐標(biāo)的距離也為絕對(duì)距離,因而貼圖在紋理映射后變形很小。

3 三角面剖分

對(duì)三維物體進(jìn)行紋理映射時(shí),通常以三角面為基本映射單位進(jìn)行映射。在局部映射的過(guò)程中,對(duì)于一塊三角面片,可能只需對(duì)一小部分區(qū)域進(jìn)行映射,若將整個(gè)面片進(jìn)行映射,則會(huì)出現(xiàn)過(guò)度映射的現(xiàn)象。可能出現(xiàn)的情況可分為3種,如圖1所示。

(1)情況1。如圖1a所示,假設(shè)點(diǎn)O為紋理中心,圓環(huán)為紋理映射區(qū)域所覆蓋區(qū)域,若采用基于三角面為基本單位的映射,則A、B、C、D和E點(diǎn)均會(huì)被覆蓋在映射區(qū)。隨著紋理映射區(qū)域變小,映射的效果會(huì)變得越來(lái)越不理想,且會(huì)出現(xiàn)過(guò)度映射現(xiàn)象。

(2)情況2。如圖1b所示,紋理中心及覆蓋區(qū)域落在一個(gè)大的三角形內(nèi),與第1種情況類似,隨著圓區(qū)域覆蓋面積變小,也會(huì)出現(xiàn)過(guò)度映射狀況。

(3)情況3。如圖1c所示,因三角形ADC不在需要被映射范圍之內(nèi),這樣會(huì)造成局部紋理映射不完整,而即使加上ADC到映射區(qū)域,也會(huì)出現(xiàn)過(guò)度映射的狀況。

圖1 確定局部紋理映射區(qū)域

對(duì)于上述情況,本文提出了一種通過(guò)交點(diǎn)求切線的方法,細(xì)化映射區(qū)域,如圖2所示。

圖2 用切線找到特征點(diǎn)

(1)如圖2a所示,紋理邊界與三角面中的2個(gè)邊會(huì)有2個(gè)交點(diǎn),以這2個(gè)點(diǎn)分別做圓的切線,再?gòu)膱A邊上取一點(diǎn)做切線,該切線與三角面的第3條邊平行,并且與上面2條切線相交,取相交點(diǎn)為2個(gè)特征點(diǎn),并且取圓與2邊的交點(diǎn)為2個(gè)特征點(diǎn),加上原點(diǎn)5個(gè)點(diǎn)為特征點(diǎn)進(jìn)行三角剖分。這5個(gè)特征點(diǎn)分別對(duì)應(yīng)5個(gè)紋理坐標(biāo)。

(2)對(duì)于第2種情況,可以從圓心到三角面在3個(gè)頂點(diǎn)進(jìn)行三角剖分。如圖2b所示,剖分后的結(jié)果與第1種情況類似,可以使用方法(1)進(jìn)行再次剖分。

(3)對(duì)于第3種情況,如圖2c所示,首先判斷ACD面是否需要映射,判斷依據(jù)是圓心到邊上的距離是否小于半徑。若該面需要進(jìn)行映射,除圓與邊的交點(diǎn)做切線外,尋找一條邊與該邊平行的切線,與另外2條切線相交的點(diǎn),取為特征點(diǎn),其后剖分的情況與前2種相似。

以圖2a為例進(jìn)行推導(dǎo)。設(shè)圓公式為:

已知A和O的坐標(biāo),可求出直線AO方程:

聯(lián)立(7)式和(8)式,即可求得F點(diǎn)坐標(biāo)(xF,yF),并以同樣的方法,可以求得G點(diǎn)坐標(biāo)(xG,yG)。

已知圓方程及F、G點(diǎn)坐標(biāo),可以求出圓上F、G點(diǎn)切線方程如下:

通過(guò)A點(diǎn)和B點(diǎn)可以求出切線HI方程,設(shè)

切線HI方程為:

聯(lián)立(9)式、(12)式及(10)式、(12)式即可求出H點(diǎn)及I點(diǎn)坐標(biāo)(xH,yH)和(xI,yI)。

通過(guò)上述過(guò)程,可求出O、F、G、H、I各點(diǎn)的坐標(biāo),并通過(guò)文中所述的逆方法,求出各點(diǎn)對(duì)應(yīng)的三維空間坐標(biāo),通過(guò)這5個(gè)特征點(diǎn)進(jìn)行三角剖分后再進(jìn)行紋理映射,達(dá)到預(yù)期效果。

可以證明在取最少特征點(diǎn)的情況下,經(jīng)過(guò)這樣的三角剖分后,可以保證局部紋理會(huì)被全部映射。而且,所有映射區(qū)域內(nèi),都不會(huì)出現(xiàn)過(guò)度映射的情況。

4 實(shí)驗(yàn)效果及分析

為了說(shuō)明上述算法的實(shí)際效果,本文在VC++編程環(huán)境中使用Open GL圖形庫(kù)構(gòu)造三維場(chǎng)景環(huán)境,通過(guò)在一個(gè)針織襪子上映射提花圖案,演示局部紋理映射和三角剖分的效果。紋理貼圖采用大小256×256像素的BMP文件。

在指定的紋理映射區(qū)域與模型中三角面片之間比例較大時(shí)(一般情況),使用本文的局部紋理映射算法實(shí)現(xiàn)映射的效果如圖3所示。顯然,算法能夠有效地實(shí)現(xiàn)局部區(qū)域內(nèi)的紋理映射。

圖3 一般情況下本文算法的映射效果

在指定的紋理映射區(qū)域與三角面之間比例較小時(shí),若不進(jìn)行三角剖分,紋理映射效果往往如圖4所示。顯然,由于構(gòu)成物體模型的三角面片大小不一,在尺度上很接近于貼圖,基本上無(wú)法找到適合貼圖大小的映射區(qū)域,因而無(wú)法恰當(dāng)?shù)赜成滟N圖,產(chǎn)生圖4所顯示的現(xiàn)象。

圖4 無(wú)三角剖分時(shí)映射效果

采用本文算法對(duì)大的三角面片進(jìn)行三角剖分后,可得到圖5所示的映射效果圖。由于剖分得到更小的三角面片,能更精確地構(gòu)建映射區(qū)域,從而得到較好的局部紋理映射效果。

圖5 有三角剖分時(shí)的映射效果

本文的一般算法與三角剖分算法時(shí)間復(fù)雜度均為:T(n)=O(nm),其中m為紋理覆蓋的三角面數(shù)。三角剖分算法較一般算法計(jì)算時(shí)間略微有所增加,但由于局部紋理映射的范圍一般比較小,紋理貼圖覆蓋的三角面數(shù)非常有限,因此算法仍然能夠滿足實(shí)用要求。

5 結(jié)束語(yǔ)

本文通過(guò)局部平面展平法進(jìn)行紋理坐標(biāo)計(jì)算,可以有效地減少二維紋理貼圖映射到三維物體上變形,通過(guò)頂點(diǎn)擴(kuò)張的方法,將紋理映射區(qū)域限制在一個(gè)合理的范圍之內(nèi),并通過(guò)三角剖分,避免了因紋理映射區(qū)域與所在三角面片尺度太接近所帶來(lái)的過(guò)度映射問(wèn)題,有效地保證了局部區(qū)域紋理映射效果。本文提出的算法成功地運(yùn)用于虛擬針織織物的修飾和提花設(shè)計(jì)中,同時(shí),對(duì)于其他類似的虛擬仿真應(yīng)用也具有實(shí)用價(jià)值。

[1]Ryan S,Cindy G,Brian W.Interactive decal compositing with discrete exponential maps[J].ACM Transactions on Graphics(TOG),2006,25(3):605-613.

[2]劉小丹,曾玲玲,孫紅巖.中心擴(kuò)散法局部區(qū)域紋理映射[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(17):3852-3855.

[3]Hormann K,Levy B,Sheffer A.Mesh parameterization:theory and practice[C]//International Conference on Computer Graphics and Interactive Techniques,2007.

[4]江巨浪.多面體表面局部紋理的映射方法[J].安慶師范學(xué)院學(xué)報(bào):自然科學(xué)版,2003,9(2):61-64.

[5]黃 燕,王美清.基于立體投影算法的局部球面紋理映射技術(shù)[J].東莞理工學(xué)院學(xué)報(bào),2009,16(5):49-54.

[6]張英杰,趙汝嘉,李永紅.基于中間曲面的局部紋理映射技術(shù)[J].西安交通大學(xué)學(xué)報(bào),1997,31(7):110-113.

[7]薛 峰,張佑生,江巨浪,等.一種快速、有效的紋理合成方法[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2005,28(11):1361-1364.

[8]檀結(jié)慶,汪忠慶.新的基于鄰近像素點(diǎn)的圖像修復(fù)算法[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2006,29(9):1072-1076.

猜你喜歡
基準(zhǔn)面剖分切線
面輪廓度逆向尺寸控制及測(cè)量
圓錐曲線的切線方程及其推廣的結(jié)論
切線在手,函數(shù)無(wú)憂
基于重心剖分的間斷有限體積元方法
二元樣條函數(shù)空間的維數(shù)研究進(jìn)展
過(guò)圓錐曲線上一點(diǎn)作切線的新方法
一種實(shí)時(shí)的三角剖分算法
復(fù)雜地電模型的非結(jié)構(gòu)多重網(wǎng)格剖分算法
最小靜校正量基準(zhǔn)面校正技術(shù)在準(zhǔn)噶爾盆地LN6井區(qū)應(yīng)用
空間域CMP參考基準(zhǔn)面實(shí)現(xiàn)方法及其效果
泰和县| 平安县| 宁河县| 香港 | 青川县| 三江| 朝阳县| 惠州市| 湖州市| 五莲县| 谷城县| 陇南市| 敦煌市| 延安市| 石棉县| 尼勒克县| 甘南县| 西城区| 高碑店市| 南宫市| 博野县| 彭水| 宁强县| 黄石市| 古田县| 塔城市| 霍山县| 东源县| 汽车| 南汇区| 绥阳县| 邯郸县| 罗山县| 安康市| 壶关县| 汝城县| 洛浦县| 锡林郭勒盟| 柘荣县| 本溪市| 苗栗市|