亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

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

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

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

        1 Perlin噪聲

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

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

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

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

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

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

        設(shè)噪聲函數(shù)為 PerlinNiose(x,y),I(x,y)為任意一點(diǎn)的噪聲值,如果I(x,y)的坐標(biāo)為整數(shù),則其數(shù)值等于原始的數(shù)值,如果I(x,y)的坐標(biāo)不為整數(shù)坐標(biāo),其數(shù)值則由包圍它的單位四邊形上的四個(gè)點(diǎn)來(lái)插值求得。其相鄰的四個(gè)控制點(diǎn)為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 個(gè)點(diǎn)的梯度,這 4 個(gè)控制點(diǎn)對(duì)待插點(diǎn)的的貢獻(xiàn)值為:

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

        2 OpenGL著色語(yǔ)言

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

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

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

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

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

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

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

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

        3 動(dòng)態(tài)水面

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

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

        在文中,高度場(chǎng)是由Perlin噪聲擾動(dòng)紋理數(shù)據(jù)來(lái)形成的,紋理上的相應(yīng)點(diǎn)的高度值是隨著噪聲控制點(diǎn)的變化趨勢(shì)而變化的。其波動(dòng)方程可表示為:

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

        3.1 待插點(diǎn)周?chē)W(wǎng)格點(diǎn)的平滑

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

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

        3.2 余弦插值

        余弦插值公式為:

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

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

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

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

        3.3 法線的計(jì)算

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

        所以該單元面的法線為:

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

        3.4 實(shí)時(shí)鏡面反射

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

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

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

        4 結(jié) 論

        對(duì)動(dòng)態(tài)水面的模擬始終是虛擬現(xiàn)實(shí)領(lǐng)域研究的重點(diǎn)之一,本文利用Perlin噪聲擾動(dòng)水面紋理形成水面高度場(chǎng),同時(shí)在 OSG基礎(chǔ)上利用OpenGL Shader渲染語(yǔ)言進(jìn)行水面渲染,并且實(shí)現(xiàn)實(shí)時(shí)的水面映射效果的方法,具有原理簡(jiǎn)單,計(jì)算量小的特點(diǎn)??朔死脗鹘y(tǒng)高分辨率網(wǎng)格創(chuàng)建水面方法計(jì)算量大的缺點(diǎn)。本方法形成的動(dò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)仿真學(xué)報(bào),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]李廣鑫,丁振國(guó),詹海生,等.一種面向虛擬環(huán)境的真實(shí)感水波面建模算法 [J].計(jì)算機(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ù)的水波動(dòng)畫(huà)[J].計(jì)算機(jī)工程與應(yīng)用,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的鏡面反射特效的實(shí)現(xiàn)[J].計(jì)算機(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的實(shí)時(shí)水面環(huán)境模擬[J].系統(tǒng)仿真學(xué)報(bào),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.

        猜你喜歡
        著色器法線插值
        基于定位法線的工件自由度判定方法及應(yīng)用
        基于UE4 實(shí)時(shí)射線追蹤技術(shù)的研究與探討
        基于Unity Shader石油泄漏現(xiàn)象模擬的研究
        基于IMx6的opengl圖形著色器開(kāi)發(fā)研究
        基于Sinc插值與相關(guān)譜的縱橫波速度比掃描方法
        橢圓法線定理的逆定理
        一種改進(jìn)FFT多譜線插值諧波分析方法
        基于四項(xiàng)最低旁瓣Nuttall窗的插值FFT諧波分析
        雙曲螺線的副法線曲面的相關(guān)性質(zhì)研究*
        Blackman-Harris窗的插值FFT諧波分析與應(yīng)用
        视频一区视频二区亚洲| 亚洲经典三级| 亚洲aⅴ无码国精品中文字慕| 精品日本一区二区视频| 99久久国内精品成人免费| 色偷偷亚洲第一成人综合网址 | 亚洲中文字幕久久在线| 7m精品福利视频导航| 日本丶国产丶欧美色综合| 久久青青草视频免费观看| 黄色影院不卡一区二区| 樱桃视频影院在线播放| 亚洲av区无码字幕中文色| 精品无码国产一二三区麻豆| 蜜桃高清视频在线看免费1| 国产精品扒开腿做爽爽爽视频| 久久久精品久久日韩一区综合| 18禁国产美女白浆在线| 一本色道久久亚洲精品| 欧美成人aaa片一区国产精品| 在线中文字幕有码中文| 亚洲妇女av一区二区| 国产一级二级三级在线观看视频 | 免费又黄又爽又猛的毛片| 精品久久久久久99人妻| 日本一区二区三区四区啪啪啪| 让少妇高潮无乱码高清在线观看| 国产女在线| 亚洲一区久久久狠婷婷| 久久亚洲av成人无码国产最大| 无码人妻丰满熟妇区五十路百度| 对白刺激的老熟女露脸| 亚洲国产精品久久久婷婷| 射精专区一区二区朝鲜| 亚洲依依成人综合在线网址| 日本少妇比比中文字幕| 日本一区二区三级在线观看| 少妇做爰免费视频网站| 国产高清在线91福利| 少妇高潮久久蜜柚av| 在线看片免费人成视频久网下载|