• 
    

    
    

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

      基于OpenGL與Perlin噪聲的3D地形仿真①

      2022-02-15 06:40:26黃澤華鐵治欣
      計算機系統(tǒng)應用 2022年1期
      關鍵詞:法線頂點光照

      黃澤華,鐵治欣,2,陳 強

      1(浙江理工大學 信息學院,杭州 310018)

      2(浙江理工大學科技與藝術學院,紹興 312369)

      自然環(huán)境的展現(xiàn)在許多應用中是必不可少的,如地理信息系統(tǒng)[1],飛行模擬或視頻游戲等.地形是這些室外環(huán)境的關鍵部分,其表示方式已在文獻中得到廣泛分析[2,3].一些研究試圖提取真實數(shù)據(jù)[4],但結果受到真實世界的限制,無法總是能夠獲得所有真實數(shù)據(jù)來表示它們.因此自動地形生成非常重要,仍是一個活躍的研究領域.利用Mandelbrot[5],Prusinkiewicz 等人[6]提出的分形維數(shù),出現(xiàn)了許多研究,這些研究主要使用過程建模來解決其創(chuàng)建過程的自動化[7].這種建模方法已被用于表示許多與地形有關的特征,包括道路、樹木、村莊、城市景觀[8–10]等,甚至用于表示大氣現(xiàn)象[11].根據(jù)Smelik 等人[12]的工作,過程建模最初是基于細分過程,其中高程圖是迭代創(chuàng)建的,為了創(chuàng)建高程,在每次迭代中添加了受控量的隨機性.基于過程建模的第一個細分算法稱為中點偏移方法[13,14],其中每次迭代都會生成一個新點,該新點的高程是通過其鄰居高程的平均值獲得的,并添加了隨每次迭代而減小的隨機位移.許多其他研究,主要是基于噪聲發(fā)生器,如Perlin 方法[15],其中高程圖是通過湍流函數(shù)獲得的.Perlin 噪聲很快,而且會創(chuàng)建均勻且隨機的地形,通常需要進行大量的后處理才能添加有趣的特征.例如Parberry[16]提出的一項工作,它使用Perlin 噪聲的一種變體——值噪聲,根據(jù)從地理信息系統(tǒng)(geographic information system,GIS)數(shù)據(jù)中提取的高程數(shù)據(jù)的空間分析來生成典型的程序地形.基于噪聲發(fā)生器的方法的優(yōu)點在于,由于每個點都可以獨立于其鄰域進行計算,因此計算成本較低.

      在國內,張潤花等[17]利用隨機中點位移法繪制地形,但由于算法隨機性,使網(wǎng)格細分的范圍難以選擇,容易產(chǎn)生地形的失真現(xiàn)象;李玉娟等[18]利用基于數(shù)字高程模型(digital elevation model,DEM)的方法,但該方法數(shù)據(jù)量較大,繪制效率較低;馬海鳳[19]對 GeoMip-Mapping 算法進行改進,利用LOD 算法繪制地形,在效率上有了提高,但未考慮動態(tài)地形的情況;鄭顧平等[20]利用WebGL 標準進行動態(tài)地形繪制,是一種基于Web 技術下動態(tài)調用OpenGL 等圖形庫進行地形繪制,但只是實現(xiàn)了幾何剪切圖算法.

      綜合對上述論文的研究,本文利用改進的Perlin噪聲算法生成高程圖,導入OpenCV 庫對圖像信息進行讀取,采用網(wǎng)格生成算法生成模型數(shù)據(jù),地形模型以及貼圖數(shù)據(jù),在OpenGL 環(huán)境下生成仿真地形圖像,解決了隨機中點位移法構建地形中產(chǎn)生的失真及仿真效果較差的問題.并且優(yōu)化了光照系統(tǒng),在保持其隨機性,低成本計算的同時,使繪制出的地形網(wǎng)格圖細節(jié)更為豐富,成像效果更為真實.

      1 Perlin 噪聲介紹

      圖形噪聲,是計算機圖形學中一類偽隨機算法,經(jīng)常用于模擬自然界中的各種紋理材質,如云[21]、波浪[22]、水面[23]、湍流[24]、雪花[25]、場景渲染[26,27]等.通過偽隨機算法計算出的偽隨機數(shù)是屬于[0,1]均勻分布的隨機數(shù)序列,并不真正的隨機,但具有類似于隨機數(shù)的統(tǒng)計特征.Perlin[15]在1985年的SIGGRAPH 大會上首次提出Perlin 函數(shù).后又在2001年,提出了Simplex 噪聲算法來減小計算復雜度.目前已經(jīng)被廣泛應用于計算機仿真領域及三維游戲制作中.Perilin 噪聲是一種基于晶格的梯度噪聲,隨機數(shù)的創(chuàng)建過程包括定義晶格結構,輸入多維點坐標,使用緩和曲線來計算他們的權重和3 個過程.以Perlin 噪聲為基礎,后續(xù)利用分形,湍流等手段,可以生成多種不同有趣的噪聲圖.

      2 3D 地形仿真的總體設計

      本文主要通過Perlin 噪聲生成隨機高程圖,以讀取高程圖單通道顏色值映射為地形高程圖為主要思路,形成三維地形網(wǎng)格圖.在構建三維地形網(wǎng)格圖時,選擇以TRIANGLES 方式[28]繪制,因此對于頂點數(shù)組的構造方式?jīng)Q定了程序處理的快慢.假設地圖大小為n×m,以全頂點繪制需要構建(n–1)(m–1)×6 個頂點,而以索引方式來構建,僅需n×m個頂點,減小了約83%的內存占用率,提高了運行效率.在仿真視覺成效方面,對不同高度的位置采用不同的貼圖進行覆蓋.在貼圖交界處,以模糊函數(shù)進行疊加計算,使過渡效果更加平滑.光照效果往往能提高整體的視覺體驗,在最終成像結果中加入光照系統(tǒng),以提升對整體細節(jié)的優(yōu)化.總結各項工作,形成總體流程圖如圖1所示.

      圖1 總體流程圖

      3 3D 地形仿真的生成

      將3D 地形生成仿真分為高程圖的生成與改進、數(shù)據(jù)集生成、貼圖策略設計與光照系統(tǒng)設計幾個部分.

      3.1 基于柏林噪聲的高程圖生成

      假設要生成一個N×N的高程圖,首先使用式(1)與式(2)初始化索引表P與隨機矩陣G.式(1)中隨機數(shù)賦值為0 到N之間無重復任意值,式(2)中隨機矩陣用于對晶格進行賦值.基于隨機矩陣的做法,與Perlin 于2002年的改進算法[29]相比,在計算量方面有所增加,但能夠提高生成噪聲圖像的隨機性.

      其中,ij(j=0,1,2,···,N-1)是0 到N–1 之間無重復隨機整數(shù).

      其中,

      Jp,q=Random()%2N/N-1,p=0,1,2,···,N-1,q=0,1,2

      如圖2所示,假設輸入點S(x,y,z),通過該點可計算得到S1,S2,···,S8,共8 個晶格值.首先通過輸入點x值,計算bx0,bx1,rx0,rx1.其中,bx0=int(x)%N,bx1=(int(x)%N+1)%N,rx0=(x-int(x))%N,rx1=(x-int(x))%N-1.同理可得,by0,by1,ry0,ry1,bz0,bz1,rz0,rz1.

      圖2 晶格圖示

      結合索引表和隨機矩陣,計算出晶格各點的權重值.

      以Perlin 光滑函數(shù)[29]為權重函數(shù)(4),以rx0,ry0,rz0為參數(shù),計算得到ωx,ωy,ωz.通過線性插值函數(shù)(5)及晶格點的權重值(3),得到兩個晶格點的線性插值,如S1與S2的線性插值a0,如式(6)所示.同理可以得到插值b0,a1,b1,如式(7)–式(9)所示.最終再對4 個插值a0,b0,a1,b1再進行二次插值,可得三維Perlin 噪聲函數(shù),如式(10)所示.

      以要生成N×N的高程圖中的每個像素點的坐標為x,y坐標值,以當前系統(tǒng)時間為z坐標值,利用Perlin 噪聲函數(shù)(10),計算圖片中每個像素點對應的高度值,可得基礎高程圖,如圖3所示,其中取N=1024.

      圖3 Perlin 基礎高程圖

      3.2 高程圖改進

      經(jīng)過經(jīng)典Perlin 噪聲算法得到的高程圖沖突效果較差,可以利用分形(Fbm)與湍流(Turbulence)算法進行改進.分形布朗運動算法主要對不同頻率和振幅的噪聲函數(shù)進行疊加,如式(11)所示.

      其中,A表示每一次噪聲疊加的權值,F表示疊加噪聲的比例,A與F的初始值為1.i為循環(huán)次數(shù),表示多張高程圖的疊加效果,通過測試,令i為4 可取得較好的效果.L和G表示每次迭代中修改A和F值的乘系數(shù),分別賦值為2 與1/2,使每次疊加的噪聲權值和大小不同.最終得到高程圖如圖4所示.

      圖4 Fbm 高程圖

      在利用Fmb 進行改進的基礎上,運用式(14)進行Turbulence 計算,Turbulence 對噪聲函數(shù)取絕對值,使噪聲值等于0 處發(fā)生突變,產(chǎn)生湍流紋理,最終得到高程圖如圖5所示.

      圖5 Turbulence 高程圖

      其中,字符含義與式(11)一致.

      為驗證算法的有效性,在相同條件下,與相曉嘉等[30]提出的基于Perlin 噪聲的高分辨率地形仿真方法(PNB_HRTDS 方法)進行比較,結果如圖6、圖7、表1所示.圖6與圖7分別是本文方法與PNB_HRTDS 方法生成的大小為1024×1024的地形仿真圖.兩圖相比,可以看出:PNB_HRTDS 方法生成的地形仿真圖的效果過于平整,山體表面褶皺缺少,山體之間的細節(jié)不夠充分.由表1可知,在不同大小高程圖中,本文方法的高程值的均值有較大提升,且標準差較大,說明高程圖中沖突效果明顯,山體的表現(xiàn)效果有所提升.

      表1 生成數(shù)據(jù)對比

      圖6 本文方法地形仿真效果圖

      圖7 PNB_HRTDS 方法地形仿真效果圖

      假設要生成n×n大小的高程圖,兩種算法均需申請大小為n的float 類型數(shù)組作為索引表P與大小為6n的float 類型數(shù)組作為隨機矩陣G,即需要 7n個float 類型的存貯空間,所以兩種算法的空間復雜度為均 O (n).對于n×n大小的高程圖中的每一點,PNB_HRTDS 方法均需要調用Perlin 噪聲函數(shù)一次,生成該點的高程,所以其時間復雜度為O (n2) ;本文方法生成一個點的高程需要調用4 次Perlin 噪聲函數(shù),所以其時間復雜度也為O (n2),但實驗生成時間要比PNB_HRTDS 方法慢一點.

      3.3 數(shù)據(jù)集生成

      3.3.1 網(wǎng)格數(shù)據(jù)生成

      通過OpenCV 庫,對前述所生成的高程圖以單通道模式進行讀取,存入圖像信息矩陣A中.以像素點顏色值映射為高度值,生成方式如圖8所示.

      在圖8中,Width、Height 表示高程圖的寬度與高度,vertices 表示網(wǎng)格數(shù)組,I、J、K表示寬高度與數(shù)組的遞增索引,Aij表示高程圖中讀出的高度值,此外還加入了 verticeScale、yScale,用于控制地圖大小的縮放比例與地圖高度的縮放比例.

      在網(wǎng)格數(shù)組的基礎上,可以使用索引的方式,優(yōu)化網(wǎng)格數(shù)據(jù)結構,加快運行效率,建立與頂點數(shù)據(jù)對應的索引數(shù)組 indices,如圖9所示,字符含義與圖8一致.

      圖8 網(wǎng)格數(shù)據(jù)生成

      圖9 索引數(shù)據(jù)生成

      3.3.2 法線數(shù)據(jù)生成與優(yōu)化

      OpneGL 以TRIANGLES 方式繪制圖形,三角形是繪制的最小圖元,故可基于三角形的數(shù)據(jù),計算垂直于該平面的垂直向量.一般情況下通過三角圖元的各頂點位置信息單獨計算,如劉鵬程等[31]進行的隧道仿真系統(tǒng)的研究與開發(fā),使用glNormal3fv () 函數(shù)進行法線計算.在本文的計算方法中,由于網(wǎng)格數(shù)組的優(yōu)化,同一頂點復用,會產(chǎn)生單個頂點包含多個垂直向量問題.本文以多次二分平均算法優(yōu)化該問題,使垂直單位向量變化更加平滑.

      如圖10(a) 所示,存在兩個三角圖元ABD 與ACD,A、D 兩點處是索引情況下的復用點.虛線AF是ABD 圖元中頂點A的法線,虛線AE是ACD 圖元中A 點的法線.此處以A 點為例,由于A 點是復用頂點,只能存在唯一法線.在不復用情況下,每一頂點都屬于唯一圖元,如圖10(b)所示,圖元中任意處的法線都與頂點一致.使用多次二分平均法處理后,使用AE 與AF的平分線AG 作為A 點的法線,作為解決沖突的手段.在頂點被多次復用的情況下,進行多次二分即可.在法線修正后,如圖10(c)所示,A 點的法線由AF 替換為AG,從而AB 線段中的位置,也會依據(jù)比例進行調整,如AB中點H,法線的方向指向A 點與B 點法線方向的折中方向.

      圖10 法線優(yōu)化

      根據(jù)本文提出優(yōu)化方案,與劉鵬程等[31]方案中使用glNormal3fv () 函數(shù)進行法線計算進行對比,圖11(a)為本文方案,圖11(b)為常規(guī)方案.從圖中可知,在使用光照計算后,在最小圖元的交界處的左右兩側產(chǎn)生亮度的跳躍性變化.而本文優(yōu)化方案下,不僅保持了光線的漫反射效果,并且在山體光線的呈現(xiàn)上有更加圓滑的效果.

      圖11 法線優(yōu)化效果對比

      3.4 貼圖策略設計

      數(shù)據(jù)集構建完成后,可以依照網(wǎng)格數(shù)組來生成三維地形的網(wǎng)格模型.但單純的模型只能反映山體的地形結構,不能模擬真實的仿真效果.因此可以通過三維紋理貼圖方法增強仿真效果.三維紋理貼圖指將二維紋理圖像張貼到三維模型的表面上,從而得到逼真的三維圖形的過程.然而,對于復雜三維模型的紋理貼圖還沒有找到直接貼圖的方法[32].通常情況下會使用一種適合場景的紋理進行貼圖,如圖12所示,但效果會顯得較為單一.本文依據(jù)對空間高度的劃分,使用雪、巖石、草坪3 種圖像進行分層采樣.將高度以一定比例劃分為3 個區(qū)域,在該區(qū)域內,使用對應的圖像進行貼圖:如圖13所示,在紅色框標示區(qū)域,不同層次交界處有較強的截斷感.可以使用平滑函數(shù)在不同層次之間增加漸變層進行優(yōu)化,使效果更為平滑:如圖14所示,紅色框標示區(qū)域內,漸變層的仿真效果更為真實,整個山體的層次更加自然.

      圖12 單紋理貼圖

      圖13 多紋理貼圖

      圖14 采用分層采樣策略的多紋理貼圖

      3.5 光照系統(tǒng)設計

      現(xiàn)實世界的光照是極其復雜的,而且會受到諸多因素的影響,這是我們有限的計算能力所無法模擬的.因此本文對光照使用馮氏光照模型(Phong lighting model)[33]對整體進行光照添加.馮氏光照模型的主要結構由3 個分量組成:環(huán)境(ambient)、漫反射(diffuse)和鏡面(specular)光照.環(huán)境分量主要取決于物體的顏色,以一定亮度百分比進行模擬.漫反射與鏡面光照是產(chǎn)生光線效果的關鍵,設計如圖15展示.在漫反射中,如圖15(a)所示,是法向量,是光源方向向量,將兩向量化為單位向量之后,進行點乘運算,得到0~1 之間的數(shù)值A,為了防止光線從后背穿過,則取A與0 之間的最大值,該值表示漫反射的強弱程度,越接近1,則越接近物體原來的顏色.在鏡面反射中,如圖15(b)所示,是法向量,是光源方向向量,是經(jīng)過平面反射之后的射線,為視線的方向向量.將與化為單位向量之后,進行點乘運算,得到0~1 之間的數(shù)值B,其含義與A一致.最終將物體色值的較低百分比如10%,及A、B與色值的乘積相加,得到物體最終在某一視角中應該呈現(xiàn)的顏色.

      圖15 漫反射及鏡面反射光照示意圖

      4 實驗結果與分析

      本文方法實現(xiàn)的硬件環(huán)境為:Intel(R) Core(TM)i7-7700HQ CPU @ 2.80 GHz,16.00 GB 內存,NVIDIA GeForce GTX 1050 Ti 顯卡,Win10 64 位操作系統(tǒng),Microsoft Visual Studio15 編譯器.本文在通過Perlin 噪音生成高程圖的基礎上,構造了網(wǎng)格數(shù)組,優(yōu)化了法線計算.實驗程序的運行結果如圖14、圖16所示.從圖14中觀察到,在不同的高緯度,有良好的漸變效果,雪,巖石,草坪之間過渡的比較自然.圖16為光源置于圖片右側較高處,模擬自然界陽光的照射情況,可以看到山體背陽面有明顯的陰影效果,向陽面有明顯的光照效果,呈現(xiàn)出更貼近現(xiàn)實的仿真效果,沒有過于尖凸的現(xiàn)象出現(xiàn),而且山體表面褶皺也表現(xiàn)較好.

      圖16 本文方法地形仿真效果圖

      5 結束語

      本文的工作主要是提出了一種基于OpenGL 與Perlin噪聲算法來生成不同的隨機地形的方法.在Perlin 噪聲函數(shù)的基礎上,以分形布朗運動為原型,對噪聲進行疊加,再對沖突部分進行湍流的計算,最終得到的高程圖沒有跳躍性與突變型,顯示了良好的效果.此外,該方法保持了Perlin 噪聲的隨機性質,每次運行都會產(chǎn)生不同的高程圖.通過解析高程圖來獲得點位的高度信息,并且導入頂點數(shù)組中,并以索引的方式減少了數(shù)據(jù)冗余和加快了渲染效率.最后通過多次二分平均算法來計算法線,結合貼圖策略及光照系統(tǒng)完成了3D 地形仿真的整體內容.實驗結果表明,該方法能夠創(chuàng)建完整的3D 地形,并且呈現(xiàn)出良好的仿真效果.本文方法同樣適應于火焰,云朵等的仿真生成.

      猜你喜歡
      法線頂點光照
      基于定位法線的工件自由度判定方法及應用
      節(jié)能環(huán)保 光照萬家(公益宣傳)
      過非等腰銳角三角形頂點和垂心的圓的性質及應用(下)
      節(jié)能環(huán)保光照萬家(公益宣傳)
      春光照瑤鄉(xiāng)
      關于頂點染色的一個猜想
      山東科學(2018年6期)2018-12-20 11:08:58
      橢圓法線定理的逆定理
      雙曲螺線的副法線曲面的相關性質研究*
      服裝CAD系統(tǒng)中的光照面向對象分析
      河南科技(2014年4期)2014-02-27 14:06:59
      數(shù)學問答
      清水县| 屏南县| 云梦县| 临安市| 修水县| 呼玛县| 新民市| 剑阁县| 来宾市| 科尔| 仲巴县| 彰化县| 海宁市| 荆门市| 胶州市| 娄烦县| 石台县| 蕉岭县| 永兴县| 仙桃市| 蒙自县| 岳阳市| 陵水| 平顺县| 基隆市| 宿迁市| 类乌齐县| 蕉岭县| 永兴县| 延吉市| 慈利县| 松溪县| 徐闻县| 马关县| 德格县| 泽州县| 民县| 松江区| 凌源市| 宝清县| 顺平县|