999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Open CASCADE的曲面法線方向計(jì)算

2019-11-03 14:07:16李都寧毛力奮原力王普勇蔣光南
電腦知識(shí)與技術(shù) 2019年23期

李都寧 毛力奮 原力 王普勇 蔣光南

摘要:法線方向是曲面的重要參數(shù),在計(jì)算圖形學(xué)中被廣泛使用,如場景中的光照及陰影效果、法線貼圖效果、三維網(wǎng)格生成等,準(zhǔn)確計(jì)算得到曲面上某點(diǎn)的法線對各類圖形效果處理的質(zhì)量具有重要的意義。本文利用Open CASCADE圖形庫,對其中的曲面幾何對象的法線方向計(jì)算方法進(jìn)行了分析,提出計(jì)算曲面法線方向的穩(wěn)健性方法,并對比了不同計(jì)算方法所得到的法線對網(wǎng)格劃分產(chǎn)生的效果,驗(yàn)證了曲面法線方向計(jì)算過程的有效性。

關(guān)鍵詞:Open CASCADE;曲面法線;BREP

中圖分類號(hào):TP393? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2019)23-0287-04

開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):

Open CASCADE(Open Computer Aided Software for Computer Aided Design and Engineering)是由法國Matra Datavision公司開發(fā)的CAD軟件系統(tǒng),是世界上最重要的開源幾何造型基礎(chǔ)軟件平臺(tái),它的存在大大方便了各類科研組織進(jìn)行相關(guān)的圖形學(xué)研究。該圖形庫是基于OpenGL開發(fā)的專用CAD類庫,提供了CAD模型建模與操作、CAD模型格式讀取與保存等功能,廣泛應(yīng)用于CAD軟件開發(fā)、CAE仿真軟件設(shè)計(jì)等方面。

曲面上某點(diǎn)的法線方向指的是在該點(diǎn)處與表面垂直的方向,對于平面來說,平面上各點(diǎn)的法向是一樣的,對于曲面來說,各點(diǎn)的法線方向則并不相同。法線方向作為曲面的重要屬性,在圖形學(xué)領(lǐng)域中被大量使用[1],其正確性對圖形場景中的光照、陰影效果、貼圖效果等有直接影響。將曲面的法線信息應(yīng)用于CAE軟件網(wǎng)格劃分過程中,能夠改善劃分網(wǎng)格的質(zhì)量。

通常情況下曲面法線計(jì)算有兩種方式,一種是微分法,通過曲面數(shù)學(xué)方程計(jì)算[2]。另一種是平均鄰接面法,通過曲面的離散化三角形計(jì)算。第二類方法最早由Gouraud[3]提出,采用頂點(diǎn)所在面的法線代表頂點(diǎn)法線,Max[4]提出了采用加權(quán)的方式處理頂點(diǎn)法線。在國內(nèi),孫娟[5]使用SVD方法計(jì)算了曲面上頂點(diǎn)的法線,程磊[6]則提出了棱邊分裂法,改進(jìn)了棱邊位置處頂點(diǎn)法線的計(jì)算精確度。

本文對Open CASCADE曲面法向方向的計(jì)算方法進(jìn)行分析,采用傳統(tǒng)微分幾何法、離散三角面片平均法與Open CASCADE中曲面屬性相結(jié)合的新方法,從而提高了Open CASCADE曲面法線計(jì)算的精確度。

1 Open CASCADE曲面

Open CASCADE中采用邊界表達(dá)法(Boundary Representation,簡稱Brep)來表示曲面,該方法根據(jù)頂點(diǎn)、邊和面構(gòu)成的曲面來精確地描述三維模型,描述信息主要包括幾何(Geometry)和拓?fù)洌═opology)兩部分。一般來說,幾何信息對幾何對象的形狀、大小、位置等進(jìn)行描述,如面的形狀、點(diǎn)的坐標(biāo),拓?fù)湫畔缀紊系捻旤c(diǎn)、邊、面的拓?fù)溥B接關(guān)系進(jìn)行描述,如圖1所示。幾何信息依附于拓樸信息而存在的,在Open CASCADE中,TopoDS拓?fù)漕悓?shí)現(xiàn)了BRep幾何模型。

曲面(Face)是Open CASCADE中用來描述三維實(shí)體邊界的拓樸,由曲面的幾何及若干個(gè)曲線(Wire)來描述。以圓柱體為例,圓柱體包含三個(gè)面:底面、頂面和側(cè)面。底面和頂面屬于Geom_Plane幾何類型,側(cè)面屬于Geom_CylindricalSurface幾何類型,通過頂面和底面的曲線來限定面的邊界,從而得到實(shí)際的圓柱面。三維模型空間中的曲面一般采用二維參數(shù)空間{u, v}來進(jìn)行定義,參數(shù)區(qū)間可以有界或無界,如對于圓柱側(cè)面Geom_CylindricalSurface類型的曲面,其u方向區(qū)間為[0,2π],v方向區(qū)間為(-[∞],+[∞])。三維曲面空間和二維參數(shù)空間的映射關(guān)系示意圖如圖2所示。

在計(jì)算機(jī)中對曲面進(jìn)行顯示時(shí),通常會(huì)對曲面進(jìn)行三角剖分,得到離散的三角面片數(shù)據(jù),對三角面片增加材質(zhì)、光照等渲染效果后,即可較好的在計(jì)算機(jī)屏幕上顯示出三維的曲面模型,在OpenCASCADE中曲面剖分后的三角面片數(shù)據(jù)是保存在曲面的數(shù)據(jù)結(jié)構(gòu)中。一般情況下,可以在參數(shù)空間上進(jìn)行網(wǎng)格剖分,然后再映射到三維模型空間,如圖3所示。在求曲面上某點(diǎn)的法線方向時(shí),所求的點(diǎn)位置通常指三角面片的頂點(diǎn)位置。

2 法線計(jì)算方法

Open CASCADE中曲面采用數(shù)學(xué)參數(shù)方程來描述,是曲面的精確表示,因此可以通過求微分的方法得到曲面上的切向向量,然后由兩個(gè)切向向量的叉乘得到曲面的法向量。圖4中曲面S(u,v)上點(diǎn)P對應(yīng)的一次微分Su,Sv即為曲面在該點(diǎn)處的切向量。

點(diǎn)P處的法向量N可用式(1)計(jì)算得到。

N = Su? Sv? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)

曲面離散為多個(gè)相連的三角形后,每個(gè)頂點(diǎn)同時(shí)位于幾個(gè)不同的三角形邊界上,因此可將與該頂點(diǎn)相鄰的三角形法向量進(jìn)行平均得到該頂點(diǎn)的法線,其中每個(gè)三角形的法向量可根據(jù)三角形兩條邊矢量的叉積計(jì)算得到。如圖5所示,曲面頂點(diǎn)P的法向就等于其相鄰六個(gè)三角形的法向平均值。為了得到更加準(zhǔn)確的法線向量,可采取不同的平均方式對三角形法線向量進(jìn)行處理,例如,可以使用每個(gè)三角形的面積作為加權(quán)的權(quán)值。

3 Open CASCADE曲面法線計(jì)算

Open CASCADE中的曲面是用參數(shù)方程來表示的,同時(shí)在曲面的數(shù)據(jù)結(jié)構(gòu)中也保留有三角網(wǎng)格數(shù)據(jù)。為了得到更加精確的曲面法線,首先可以基于曲面參數(shù)方程,采用微分法來直接計(jì)算法向量,如果該方式計(jì)算失敗,則采用平均法向的方法來計(jì)算。

實(shí)際中基于曲面參數(shù)方程法計(jì)算法線之所以會(huì)失敗,是因?yàn)椴捎脜?shù)形式時(shí),需要處理由參數(shù)化引起的奇異性(Singularity)。這種奇異性是由于參數(shù)方程引起的,典型的例子是參數(shù)表示的球面,Open CASCADE中球面的參數(shù)方程如式(2)所示。

[Su,v=P+r?cosv?cosu?Dx+sinu?Dy+r?sinv ?Dz] (2)

其中,[u,v∈0,2π×[-π2,π2]]。當(dāng)[v=-π2]時(shí),對于任意的[u∈0,2π]有:

[Su,-π2=P-r?sinv ?Dz] (3)

從式(3)中可以看出,[v=-π2]時(shí)所對應(yīng)的參數(shù)空間中的邊退化(Degenerated)成了一個(gè)點(diǎn),即球面的極點(diǎn)。同樣的,當(dāng)[v=π2] 時(shí)也存在邊的退化情況。

對于球面來說,顯然極點(diǎn)處的法線是存在的,然而對于式(3)所表示的參數(shù)方程,則無法通過切向量叉乘的方式計(jì)算法向量。事實(shí)上,通過球面的參數(shù)方程可以計(jì)算得到某點(diǎn)u、v方向上的切向量如式(4)、(5)所示。

[Su=r?cosv?(-sinu ?Dx+cosu ?Dy)] (4)

[Sv=-r?sinv?cosu ?Dx+sinu ?Dy+r?cosv?Dz] (5)

當(dāng)[v=-π2]或[π2] 時(shí),對于任意的[u∈0,2π]有:

[Suu,-π2=Suu,π2=0] (6)

即在球面的極點(diǎn)處切向量[Su]為零向量,這就意味著不能通過對切向量叉乘的方式計(jì)算法向量。由此可知,對于參數(shù)化的曲面,需要u或v方向上的切向量均不為零,才能求出法向量。

Open CASCADE中對退化點(diǎn)的法線計(jì)算采用近似的方式進(jìn)行處理。首先,用一階泰勒展開代替法線向量N(u,v),則計(jì)算法線方向等效于求曲面上某點(diǎn)處的二階微分,如果計(jì)算仍舊沒有成功,則給定退化點(diǎn)附近微小的步長,計(jì)算距離退化點(diǎn)微小距離的點(diǎn)的法向量。由上可知,退化點(diǎn)處的法線會(huì)出現(xiàn)計(jì)算不準(zhǔn)的情況。

實(shí)際上,Open CASCADE中對于不同的曲面類型,提供了很多額外的幾何信息,可以充分利用Open CASCADE幾何的屬性來判斷并計(jì)算特殊點(diǎn)處的法線方向。以圓錐為例,對于圓錐曲面上的點(diǎn),只有圓錐頂點(diǎn)的位置比較特殊無法計(jì)算得到,其他位置的法線可以通過微分法得到。Open CASCADE中對圓錐曲面定義了主軸方向?qū)傩?,如圖6所示。

其中,如果圓錐半錐角為正的話,錐尖在主軸的負(fù)方向,半錐角為負(fù)的話,錐尖在主軸的正方向。因此,可以借助圓錐曲面半錐角的正負(fù)以及主軸方向來定義圓錐頂點(diǎn)的法線方向,從而得到準(zhǔn)確的結(jié)果。

綜上,對于Open CASCADE中的曲面S,求曲面S上點(diǎn)P(P為曲面離散三角形面片上的某個(gè)頂點(diǎn))的法線,相應(yīng)的算法流程為:

a) 判斷曲面S類型及點(diǎn)P的位置,如果為存在奇異點(diǎn)的曲面(如圓錐曲面),且點(diǎn)的位置是奇異點(diǎn),轉(zhuǎn)步驟b),否則轉(zhuǎn)步驟c);

b) 根據(jù)曲面信息中的參數(shù),計(jì)算奇異點(diǎn)P的準(zhǔn)確法線,轉(zhuǎn)步驟g);

c) 求點(diǎn)P處u,v方向上的切向量,如果切向量存在為零的情況,轉(zhuǎn)步驟d),否則轉(zhuǎn)步驟e);

d) 求點(diǎn)P處的二階微分,通過一階泰勒展開近似計(jì)算法線方向,判斷法線方向是否正確(非零向量),正確轉(zhuǎn)步驟g),否則轉(zhuǎn)步驟f);

e) 通過切向量叉乘得到法線方向,轉(zhuǎn)步驟g);

f) 將P點(diǎn)所相連的三角面片法線進(jìn)行平均,作為P點(diǎn)法線方向,轉(zhuǎn)步驟g);

g) 輸出法線方向。

為了驗(yàn)證上述算法流程的有效性,這里以一個(gè)包含圓錐曲面的幾何模型為例,采用不同方法計(jì)算得到相應(yīng)的曲面法線,然后使用法線信息進(jìn)行網(wǎng)格生成,并對比所生成網(wǎng)格的效果。算例幾何模型以及其局部的三角面片模型如圖7所示。

網(wǎng)格劃分要求對離散模型中所有三角形的每個(gè)節(jié)點(diǎn)位置計(jì)算法線方向,理論上同一個(gè)位置的節(jié)點(diǎn)法線方向在每個(gè)三角形中計(jì)算的結(jié)果均相同,但實(shí)際中由于計(jì)算方法的不同,確會(huì)出現(xiàn)不同的結(jié)果。這里分為三種情況進(jìn)行對比:

1) 曲面奇異點(diǎn)采用求二階微分的方法處理,若求解不成功,則計(jì)算離奇異點(diǎn)非常近的點(diǎn)法線方向;

2) 曲面奇異點(diǎn)采用三角面片法線平均的方法處理;

3) 曲面奇異點(diǎn)采用本文提出的算法流程處理。

根據(jù)不同算法得到的法線方向劃分得到的網(wǎng)格如圖8所示。

由圖8可以看出,第一種情況下,由于采用微分法計(jì)算法線,在不同三角形中的奇異點(diǎn)處計(jì)算得到的法線方向很可能不一致,導(dǎo)致在圓錐頂點(diǎn)處的網(wǎng)格生成錯(cuò)誤。第二種情況下,采用離散三角形法線平均的方式得到的法線方向一致,但存在一定的方向偏差,在劃分網(wǎng)格時(shí)會(huì)判斷此處法線方向變化較大,從而加密網(wǎng)格。第三種情況下,得到的法線方向一致且無偏差,劃分的網(wǎng)格比較均勻。

4 結(jié)論

本文基于Open CASCADE的曲面提出了一種計(jì)算法線方向的方法,該方法有效結(jié)合了微分法、平均法線法以及曲面的屬性信息,通過實(shí)際網(wǎng)格劃分的驗(yàn)證,表明該方法具有適應(yīng)性強(qiáng)的特點(diǎn),能夠精確的獲取到曲面法線方向。

參考文獻(xiàn):

[1] 張?jiān)圃? 3D游戲中法線貼圖技術(shù)的數(shù)學(xué)方法[J]. 電腦知識(shí)與技術(shù), 2011, 7(32).

[2] Gouraud, H. Continuous Shading of Curved Surfaces[J]. IEEE Transactions on Computers, 1971, C-20(6):623-629.

[3] Max, Nelson L.. Weights for Computing Vertex Normals from Facet Normals[J]. Journal of Graphics, GPU, & Game Tools, 1999, 4 (2): 1-6.

[4] 孫娟. 使用SVD計(jì)算頂點(diǎn)法線[J]. 電腦知識(shí)與技術(shù), 2013(23):5331-5333.

[5] 程磊, 劉海艷. 一種三維實(shí)體模型表面法線計(jì)算方法研究[J]. 沈陽理工大學(xué)學(xué)報(bào), 2009, 28(4).

【通聯(lián)編輯:唐一東】

主站蜘蛛池模板: 国产精品免费电影| 亚洲区视频在线观看| 日韩国产无码一区| 天天干天天色综合网| 18禁色诱爆乳网站| 日本三区视频| 亚洲丝袜第一页| 91免费国产在线观看尤物| 欧美成人影院亚洲综合图| 国产国拍精品视频免费看| 97久久免费视频| 久久人搡人人玩人妻精品| 成人福利在线免费观看| 亚洲最大福利视频网| 成人亚洲国产| 在线视频一区二区三区不卡| 国产精品视频导航| 四虎永久免费网站| 一区二区午夜| 秋霞一区二区三区| 午夜高清国产拍精品| 四虎影院国产| jizz在线免费播放| 欧美成人午夜影院| 免费aa毛片| 婷婷五月在线视频| 国产精品美女免费视频大全 | 99re在线视频观看| 88av在线| 无码又爽又刺激的高潮视频| 精品1区2区3区| 亚洲国产精品无码AV| 国产一区自拍视频| 91九色视频网| 人妻一区二区三区无码精品一区 | 九九免费观看全部免费视频| 亚洲三级色| 色一情一乱一伦一区二区三区小说| 九色91在线视频| 国产性爱网站| 久久久久久尹人网香蕉| 国产欧美日韩免费| 国产精品人人做人人爽人人添| 久久天天躁夜夜躁狠狠| 日本国产在线| 国产夜色视频| 亚洲无码精品在线播放| 色偷偷综合网| 成·人免费午夜无码视频在线观看| 国产在线欧美| 精品国产aⅴ一区二区三区| 园内精品自拍视频在线播放| 午夜精品一区二区蜜桃| 亚洲欧洲日产国产无码AV| 亚洲欧美综合在线观看| 无码内射中文字幕岛国片| 欧美午夜小视频| 777午夜精品电影免费看| 亚洲国产理论片在线播放| 精品国产免费观看一区| 在线中文字幕日韩| 国产成人精品高清在线| 她的性爱视频| 日韩在线第三页| 亚洲日本www| 高清无码手机在线观看| 夜夜高潮夜夜爽国产伦精品| 亚洲 欧美 日韩综合一区| 爽爽影院十八禁在线观看| 东京热av无码电影一区二区| 自偷自拍三级全三级视频 | 欧美在线精品一区二区三区| 波多野吉衣一区二区三区av| 成年人国产视频| 国产一级毛片高清完整视频版| 国产日韩精品一区在线不卡| 婷婷午夜天| 国产毛片高清一级国语 | 久久久久中文字幕精品视频| 99尹人香蕉国产免费天天拍| 国产喷水视频| 亚洲成a人片|