• 
    

    
    

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

      ?

      一種動態(tài)水流生成新方法

      2012-09-26 02:26:56周加軍李大健崔赫琳
      電子設計工程 2012年8期
      關(guān)鍵詞:著色器法線插值

      齊 敏,周加軍,李大健,崔赫琳

      (1.西北工業(yè)大學 陜西 西安 710129;2.西北工業(yè)大學365研究所 陜西 西安 710129)

      在虛擬現(xiàn)實和可視化仿真中,對自然景物的模擬是其研究的重點之一。動態(tài)水流經(jīng)常出現(xiàn)在虛擬環(huán)境當中,它能夠在很大程度上增加虛擬環(huán)境的真實感。水流與煙霧、火焰一樣,其形狀和運動的方式受其它景物的影響,沒有規(guī)律性,因此不能用傳統(tǒng)的幾何建模方法來創(chuàng)建它。

      目前有多種形成水波的方法,在國外,Peachey[1]采用了正弦函數(shù)與二次函數(shù)線性組合的方法來模擬波浪外形。Fournier[2]等人則利用構(gòu)造參數(shù)曲面合成的方法來模擬比較復雜的海浪。Foster[3]等人使用有限差分近似求解Navier-Stokes方程,用得到流速場和壓力場產(chǎn)生水波高度場模擬出較真實的水面效果。Perlin[4]提出了一種噪聲圖像合成方法,利用噪聲函數(shù)生成連續(xù)的二維噪聲曲面,再疊加成分形曲面。Johanson[5]利用Perlin噪聲和投影網(wǎng)格來模擬海浪等。

      在國內(nèi),楊懷平和孫家廣[6]從海洋學觀測的經(jīng)驗入手,利用海浪譜對深水波進行了模擬。李廣鑫[7]等人引入Perlin噪聲作為水面高度場動態(tài)變化的激勵源,使用準均勻B樣條曲面來構(gòu)造水面,來模擬水面連續(xù)動蕩變化的效果,而且用CubeMap紋理映射技術(shù)模擬了水面的反射效果等。宋利等人利用Fourier[8]合成技術(shù),對模型表面利用靜止水面的圖像數(shù)據(jù)進行紋理映射,模擬雨滴下落的自然現(xiàn)象。

      1 Perlin噪聲

      Perlin[4]噪聲是由Ken Perlin發(fā)明的自然噪聲生成算法??梢杂脕砟M自然界中的噪聲現(xiàn)象。用它可以得到連續(xù)變化的二維圖像,例如可以用它來模擬人體的隨機運動,螞蟻行進的線路,也可以通過計算分形和模擬云朵、火焰等非常復雜的紋理。Perlin噪聲對各個點的計算是相互獨立的,非常適合使用圖形處理器進行計算。

      創(chuàng)建Perlin噪聲函數(shù),需要有一個噪聲函數(shù)和一個插值函數(shù):

      1)噪聲函數(shù)基本上是一個種子隨機發(fā)生器。它需要有一個整數(shù)作為參數(shù),然后根據(jù)這個參數(shù)得到一個隨機數(shù)。對于相同的兩個參數(shù),會得到相同的結(jié)果。

      2)可以在兩值之間進行平滑插值,來形成一個可以輸入非整參數(shù)的連續(xù)函數(shù),由此來填充兩個隨機點之間的非整數(shù)的空白部分,目前常用的插值函數(shù)有線性插值、余弦插值、立方插值以及多次方插值函數(shù)。本文中Perlin利用余弦插值進行平滑,得到了很好的平滑效果。

      在文中需要利用二維的Perlin噪聲函數(shù)對水面紋理進行擾動。首先要構(gòu)造一個二維梯度場,如圖1,將二維噪聲面分割為個網(wǎng)格,每個網(wǎng)格點則為噪聲面的控制點,每個控制點的梯度方向和長度都是隨機產(chǎn)生的,并且是一次性的,但是在求每個噪聲控制點的過程中,其梯度是不變的,這就使得Perlin噪聲對于相同的整數(shù)輸入,產(chǎn)生相同的輸出。

      圖1 噪聲網(wǎng)格梯度圖Fig.1 Gradient map of noise grid

      設噪聲函數(shù)為 PerlinNiose(x,y),I(x,y)為任意一點的噪聲值,如果I(x,y)的坐標為整數(shù),則其數(shù)值等于原始的數(shù)值,如果I(x,y)的坐標不為整數(shù)坐標,其數(shù)值則由包圍它的單位四邊形上的四個點來插值求得。其相鄰的四個控制點為N(i,y),N(i,j+1),N(i+1,j),N(i+1,j+1),其中 v(i,j)v(i,j+1),v(i+1,j),v(i+1,j+1)分別為這 4 個點的梯度,這 4 個控制點對待插點的的貢獻值為:

      然后在 x,y 方向上利用 D1,D2,D3,D4對 I(x,y)進行余弦插值,即可得到平滑的噪聲平面。其余弦插值函數(shù)為

      2 OpenGL著色語言

      可編程的圖形硬件是提高圖形程序設計靈活性和效率的一個重要手段,隨著圖形處理單元GPU的逐漸完善,OpenGL著色語言(GLSL)應運而生,它可以使得開發(fā)人員可以很好的控制圖形處理管線,實現(xiàn)各種完美的圖形渲染效果。

      最新的GLSL主要包含頂點著色器(Vertex Shader),片元著色器(Fragment Shader),和幾何著色器(Geometry Shader)。

      1)頂點著色器 在OpenGL著色語言中,頂點不僅是位置坐標值,還包括法線坐標、紋理坐標、顏色坐標、霧坐標和自定義屬性坐標。在頂點處理的過程中,數(shù)據(jù)通過attribute變量,uniform變量和紋理貼圖的方式傳遞給頂點著色器。經(jīng)過處理后的數(shù)據(jù)再通過varying變量和專用的頂點著色器輸出變量從頂點著色器輸出,并將頂點插值得到的結(jié)果傳入幾何著色器,或者片元著色器。

      2)片元著色器 是一個可編程的處理面片數(shù)值及數(shù)據(jù)的單元。片元處理器可以完成對圖形的插值,紋理的訪問等相關(guān)處理,以及實現(xiàn)霧化效果和顏色求和。片元著色器可以處理光柵化生成的點、線、多邊形,像素集合及位圖等,但面片處理器不能完成多個面片的同時操作。

      3)幾何著色器 幾何著色器的操作對象是圖元,包括一維的點圖元,二維的線圖元,三維的三角形圖元。幾何著色器利用內(nèi)置變量gl_VerticesIn獲取當前的圖元的維數(shù),從而獲得圖元的每個元素的數(shù)值。并且?guī)缀沃饕笥脩糁鲃釉O置輸入和輸出圖元的性質(zhì)。

      OpenGL著色器在渲染管線中的位置和作用如圖2所示。

      圖2 OpenGL著色器渲染流程Fig.2 Flowing chart of OpenGL Shader

      頂點著色器可以完成頂點替代、法線變換、生成和變換紋理坐標、光照及材質(zhì)應用的功能;片元著色器則可以實現(xiàn)替代紋理、霧化、像素匯總的功能;幾何著色器在圖元裝配的過程中生成新的圖元。

      3 動態(tài)水面

      文中利用Perlin噪聲作為驅(qū)動源,擾動輸入的水面圖片,再通過OpenGL渲染語言進行圖片中片元法線、顏色操作等,便可形成比較真實的水面。

      首先創(chuàng)建一個幾何平面,然后把將要當做水面紋理的純色圖片映射到幾何平面上,作為動態(tài)水面的初始高度場。采用此種方法,可以把三維立體波浪的求解過程變換為對二維平面擾動來求解波浪面。從而較求解傳統(tǒng)波動方程,可以大大簡化計算過程和減少工作量。

      在文中,高度場是由Perlin噪聲擾動紋理數(shù)據(jù)來形成的,紋理上的相應點的高度值是隨著噪聲控制點的變化趨勢而變化的。其波動方程可表示為:

      其中x,y為水面相應點的橫坐標與縱坐標,t代表當前時刻,則 Z(t)表示在噪聲的擾動下,坐標(x,y)處點的高度值。當Z(t)=0 時,表示該點處于水平面狀態(tài),當 Z(t)不等于 0 時,則表示該點處于已形成的水波面上。對于該水面,以一定的間距把水面分割為有點的網(wǎng)格面,本文中以1為單位,使得相鄰的網(wǎng)格點組成單位矩形面,在網(wǎng)格點上,根據(jù)公式1即可求得其對應坐標的數(shù)值,不在網(wǎng)格點上的點數(shù)值則由相鄰的點插值得到。其插值過程如下。

      3.1 待插點周圍網(wǎng)格點的平滑

      對于任意一點的I(x,y),由包圍它的四個點進行插值,這四個點分別為 N([x],[y]),N([x]+1,[y]),N([x],[y]+1),N([x]+1,[y]+1),為了得到平滑的效果,在插值之前,先對這四個點進行平滑。平滑按照Perlin噪聲的平滑公式進行平滑,以N([x],[y])點為例,得到的結(jié)果為:

      用同樣的方法可以求得其他 3 個點 N([x]+1,[y]),N([x],[y]+1),N([x]+1,[y]+1)的數(shù)值,然后利用得到的平滑后的點,分別在X,Y方向上進行余弦插值。

      3.2 余弦插值

      余弦插值公式為:

      其中a,b代表根據(jù)公式2求得的各個網(wǎng)格點的平滑結(jié)果,x代表網(wǎng)格點與相應點在X方向的距離,即可看做在插值中,各網(wǎng)格點對待插值點的貢獻值。

      設在 X 方向的插值結(jié)果分別為 F1(x,y),F(xiàn)2(x,y)。

      利用這兩個結(jié)果再在Y方向上進行插值,即得到I(x,y)處的數(shù)值。

      其中y代表待插點與相應點在Y方向的距離。經(jīng)過此項插值可獲得平滑的水面高度場,此時可得到平滑動蕩的水面,此時的水面還沒有具備水面的特性,既沒有反射、映射等效果。接下來通過水面法線等計算來實現(xiàn)以上效果。

      3.3 法線的計算

      文中法線的計算是以網(wǎng)格中單位矩形為單位面片的。

      所以該單元面的法線為:

      隨著水面的波動,各個單元面的法向量也隨著變化,由于各個單元面的法向量不同,所以就出現(xiàn)了明暗不同的效果。再通過OpenGL渲染語言對生成的水面進行渲染,對法線進行實時更新,實時計算各個面的法線,同時根據(jù)網(wǎng)格中每個點的高度來調(diào)節(jié)點的顏色值,使得不同高度的點呈現(xiàn)出不同的顏色值,從而實現(xiàn)接近真實水面的色調(diào)。

      3.4 實時鏡面反射

      本文中的反射效果根據(jù)OSG中的模板緩存[9]來實現(xiàn)的。根據(jù)鏡面反射[10]原理,在繪制虛擬環(huán)境實體時,還要對它施加矩陣變換來實現(xiàn)關(guān)于鏡面的對稱影像。然后將鏡面影像寫入模版緩存,以防止超出鏡面范圍的鏡像被顯示。然后根據(jù)反射原理求得觀察景物倒影視線與水面的范圍,將景物倒影進行投影變換,映射到水面的可視范圍,從而對影像與水面混合繪制。隨著視點位置的變化,對倒影的可視區(qū)域位置也會發(fā)生變化,在此重新對倒影進行投影變換,從而獲得真實水面影像。

      圖3 反射原理Fig.3 Principle of reflection

      圖4 動態(tài)水面效果圖Fig.4 Flowing warter surface

      4 結(jié) 論

      對動態(tài)水面的模擬始終是虛擬現(xiàn)實領域研究的重點之一,本文利用Perlin噪聲擾動水面紋理形成水面高度場,同時在 OSG基礎上利用OpenGL Shader渲染語言進行水面渲染,并且實現(xiàn)實時的水面映射效果的方法,具有原理簡單,計算量小的特點。克服了利用傳統(tǒng)高分辨率網(wǎng)格創(chuàng)建水面方法計算量大的缺點。本方法形成的動態(tài)水面可以與三維地形等模型一起渲染,可以得到很好的整體效果。

      [1]Peachey D.Modeling waves and surf[J].Computer Graphics,1986,20(4):65-74.

      [2]Fournier A,Reeves W T.A simple model of ocean waves[J].Computer Graphics,1986,20(4): 75-84.

      [3]Foster N,Metaxas D.Realistic animation of liquids[J].Graphical Models and Image Processing,1996,58(5):471-483.

      [4]Perlin K.An image synthesizer[J].Computer Graphics,1985,19(3):287-296.

      [5]Johanson C.Real-time water rendering-Introducing the projected grid concept[M].Sweden:Department of Computer Science,Lund University,Master dissertation,2004.

      [6]楊懷平,孫家廣.基于海浪譜的波浪模擬[J].系統(tǒng)仿真學報,2002,14(9):1175-1178.

      YANG Huai-ping,SUN Jia-guang.Waves simulation based on the wave spectrum of ocean.Journal of System Simulation,2002,14(9):1175-1178.

      [7]李廣鑫,丁振國,詹海生,等.一種面向虛擬環(huán)境的真實感水波面建模算法 [J].計算機研究與發(fā)展,2004,41(9):1580-1585.

      LI Guang-xin,DING Zhen-guo,ZHAN Hai-sheng,et al.A modeling algorithm for realistic water surface simulation in virtual environment[J].Journal of Computer Research and Development,2004,41(9):1580-1585.

      [8]宋利,周源華,周軍.基于Fourier合成技術(shù)的水波動畫[J].計算機工程與應用,2002,(6):10-11.

      SONG Li,ZHOU Yuan-hua,ZHOU Jun.Waves animation based on fourier synthesis[J].Computer Engineering and Applications,2002,(6):10-11.

      [9]曹莉,李紹彬,申閆春.基于OSG的鏡面反射特效的實現(xiàn)[J].計算機仿真,2009,26(8):208-211.

      CAO Li,LI Shao-bin,SHEN Yan-chun.Implementation of mirror reflection effect based on OSG[J].Computer Emulation,2009,26(8):208-211.

      [10]馬駿,朱衡君,龔建華.基于Cg和 OpenGL的實時水面環(huán)境模擬[J].系統(tǒng)仿真學報,2006,18(2):395-340.

      MA Jun,ZHU Heng-jun,GONG Jian-hua.Simulation of realtime water surface based on Cg and OpenGL[J].Journal of System Simulation,2006,18(2):395-340.

      猜你喜歡
      著色器法線插值
      基于定位法線的工件自由度判定方法及應用
      基于UE4 實時射線追蹤技術(shù)的研究與探討
      基于Unity Shader石油泄漏現(xiàn)象模擬的研究
      基于IMx6的opengl圖形著色器開發(fā)研究
      中國新通信(2020年2期)2020-06-24 03:06:44
      基于Sinc插值與相關(guān)譜的縱橫波速度比掃描方法
      橢圓法線定理的逆定理
      一種改進FFT多譜線插值諧波分析方法
      基于四項最低旁瓣Nuttall窗的插值FFT諧波分析
      雙曲螺線的副法線曲面的相關(guān)性質(zhì)研究*
      Blackman-Harris窗的插值FFT諧波分析與應用
      屯门区| 镇康县| 肃宁县| 望城县| 南漳县| 华池县| 株洲市| 定远县| 双江| 慈溪市| 邹城市| 荆州市| 灌阳县| 长沙市| 藁城市| 孟村| 洛南县| 凤庆县| 郎溪县| 铜山县| 桂阳县| 宁海县| 永清县| 大关县| 汉中市| 莎车县| 石河子市| 民和| 加查县| 宁武县| 赤峰市| 元阳县| 湖北省| 南靖县| 岚皋县| 凤庆县| 嵩明县| 安宁市| 闽清县| 永昌县| 永福县|