• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Open CASCADE的曲面法線方向計算

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

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

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

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

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

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

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

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

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

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

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

      1 Open CASCADE曲面

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

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

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

      2 法線計算方法

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

      點P處的法向量N可用式(1)計算得到。

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

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

      3 Open CASCADE曲面法線計算

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

      實際中基于曲面參數(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]時,對于任意的[u∈0,2π]有:

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

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

      對于球面來說,顯然極點處的法線是存在的,然而對于式(3)所表示的參數(shù)方程,則無法通過切向量叉乘的方式計算法向量。事實上,通過球面的參數(shù)方程可以計算得到某點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] 時,對于任意的[u∈0,2π]有:

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

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

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

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

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

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

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

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

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

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

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

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

      g) 輸出法線方向。

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

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

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

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

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

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

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

      4 結(jié)論

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

      參考文獻(xiàn):

      [1] 張云苑. 3D游戲中法線貼圖技術(shù)的數(shù)學(xué)方法[J]. 電腦知識與技術(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]. 電腦知識與技術(shù), 2013(23):5331-5333.

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

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

      陆丰市| 镇巴县| 无锡市| 阿城市| 仲巴县| 临高县| 齐河县| 莱芜市| 改则县| 大城县| 洛扎县| 万宁市| 米泉市| 武夷山市| 禄丰县| 涪陵区| 沅江市| 会昌县| 云浮市| 喀什市| 田林县| 夹江县| 茂名市| 房产| 始兴县| 凤台县| 闽侯县| 清徐县| 蚌埠市| 左权县| 西昌市| 紫云| 台北县| 安岳县| 宝鸡市| 大石桥市| 淳安县| 花垣县| 泽普县| 浑源县| 乌拉特后旗|