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

基于OpenGL的流體交互式仿真

2007-01-01 00:00:00陳孝威

摘 要:為避免二維波方程中的大量計(jì)算,使用二維波動(dòng)方程的中心差分近似來模擬流體運(yùn)動(dòng)。在該方法上實(shí)現(xiàn)了基于物理的浮力和阻力模型,模擬物體在流體表面的漂浮。在OpenGL上實(shí)現(xiàn)上述方法,實(shí)驗(yàn)證明該方法實(shí)現(xiàn)簡單,大大降低了運(yùn)算代價(jià)。

關(guān)鍵詞:虛擬現(xiàn)實(shí);流體;波動(dòng);柵格; 仿真

中圖法分類號(hào):TP391.9文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1001—3695(2007)02—0186—03

近幾年來,隨著計(jì)算機(jī)硬件技術(shù)和計(jì)算機(jī)圖形學(xué)、三維仿真、虛擬現(xiàn)實(shí)等技術(shù)的快速發(fā)展,實(shí)時(shí)模擬真實(shí)的室外環(huán)境成為可能,而動(dòng)態(tài)的流體對(duì)任何室外游戲場景都可以增加極大的美感。國內(nèi)外的學(xué)者對(duì)流體模擬進(jìn)行了許多研究,如Trim [1]將水面看作一個(gè)繃緊伸展的彈性膜,忽略其重力,采用偏微分和積分來模擬水面,但這種方法計(jì)算量大。Press將流體表面分隔為大小平均的柵格,將上述積分變化為離散操作,利用快速傅里葉變換(FFT)進(jìn)行計(jì)算,成功地簡化了上述方法,但在交互式應(yīng)用中,如果柵格較大,其計(jì)算代價(jià)也高得驚人[2]。采用紋理映射中對(duì)紋理矩陣操作的方法可以非常簡單地實(shí)現(xiàn)浮動(dòng)的海面[3],但逼真度低且無法實(shí)時(shí)模擬物體在水面上的移動(dòng)情況。通過計(jì)算級(jí)數(shù)中重要的項(xiàng)也可以得到近似解,雖然該方法直接且穩(wěn)定,但效率很低。因?yàn)榇蠖鄶?shù)的CPU計(jì)算一個(gè)三角函數(shù)要用大約30個(gè)周期,即使沿x,y方向僅取三個(gè)頻率最大的值,每個(gè)時(shí)間間隔每一點(diǎn)也要計(jì)算九個(gè)正弦函數(shù),對(duì)于交互應(yīng)用中較大的柵格其代價(jià)更高。為減少運(yùn)行的代價(jià)且方便實(shí)現(xiàn)與水面漂浮物體的交互,本文通過使用二維波動(dòng)方程的中心差分近似,使每個(gè)點(diǎn)僅用幾個(gè)算術(shù)運(yùn)算就能模擬流體表面的水平運(yùn)動(dòng)。在這種表面的基礎(chǔ)上,對(duì)漂浮物體進(jìn)行受力分析,實(shí)現(xiàn)了物體在水面中的交互式模擬。

1 流體表面的模擬實(shí)現(xiàn)

流體的仿真一般采用如下的二維波方程:

其中常數(shù)c代表每單位時(shí)間位移的距離,即流體的速度;μ為非負(fù)常數(shù),代表流體的黏性,該值大體上決定了波在一種表面上傳播的距離,也就是波消失的時(shí)間。較小的μ值可以讓波存在時(shí)間較長,適合模擬水波;較大的μ值會(huì)導(dǎo)致波的快速消失,如黏稠的油波。

本文假設(shè)邊界條件是齊次的(即邊緣不作上下運(yùn)動(dòng)),且流體表面的初始速度為0,對(duì)于一個(gè)L×L大小的正方形流體表面用三角形網(wǎng)格連接,網(wǎng)格的頂點(diǎn)排列成平均分隔的柵格,如圖1所示。式(1)的二維波方程可以用分離變量的解析方法求解,但其求解過程十分復(fù)雜、效率低,在實(shí)時(shí)仿真時(shí)需要相當(dāng)大的計(jì)算量。為簡化運(yùn)算,采用近似導(dǎo)數(shù)方法模擬波在流體表面的傳播過程。

1.1 波動(dòng)的模擬偏導(dǎo)數(shù)實(shí)現(xiàn)

1.2 不穩(wěn)定性的限制

1.3 邊界的反射

水域通常不是正方形的,河流、湖泊和海洋有著不同斜度的不規(guī)則海岸線,而且島嶼也可能存在于水域內(nèi)部。如果水岸非常陡峭甚至是垂直的,波浪從海岸線反射回來就幾乎不會(huì)失去能量;然而如果水岸是傾斜的,波浪的反射波可能會(huì)非常弱,或根本沒有。如果波浪不是垂直擊向岸邊,那么就會(huì)以某個(gè)角度反射回來。可以通過一個(gè)本地阻尼系數(shù)di, j調(diào)節(jié)zn+1的值來模擬。系數(shù)為1表明允許在高度值上自由運(yùn)動(dòng)而不損失任何能量;系數(shù)為0代表限制在那個(gè)位置水域的所有運(yùn)動(dòng)。如果這些系數(shù)是根據(jù)地形特征來分配和調(diào)節(jié)的,波浪對(duì)海岸線做出的反應(yīng)就更自然。例如,如果海岸是陡峭的,阻尼系數(shù)就應(yīng)該從1(水)到0(陸地)作一個(gè)快速的轉(zhuǎn)變;如果海岸是逐漸傾斜的,阻尼系數(shù)就應(yīng)該從1漸變到0。實(shí)際上,將略小于1的阻尼系數(shù)用于“濕的”柵格比較好,可以產(chǎn)生較少的能量損耗;否則波動(dòng)會(huì)無限地延續(xù)下去。

1.4 算法的具體實(shí)現(xiàn)

為避免在時(shí)刻t-1,t0,t1的Z值存儲(chǔ)三個(gè)柵格,將zn-1被zn+1適當(dāng)代換,只需要兩個(gè)柵格, 通過在傳遞結(jié)束時(shí),指向zn+1和zn的值的內(nèi)存指針進(jìn)行交換實(shí)現(xiàn)。因此開辟兩個(gè)緩沖區(qū),每一個(gè)為包含n×m個(gè)頂點(diǎn)位置的數(shù)組。在顯示每一幀時(shí),包含當(dāng)前頂點(diǎn)位置的緩沖區(qū)稱為當(dāng)前緩沖區(qū),包含上一時(shí)間段的頂點(diǎn)位置的緩沖區(qū)稱為舊緩沖區(qū)。在計(jì)算頂點(diǎn)的新位移時(shí),需要用新的頂點(diǎn)位移更新舊緩沖區(qū)中的頂點(diǎn)位置,則當(dāng)前緩沖區(qū)成為下一幀中的舊緩沖區(qū),而舊緩沖區(qū)則成為下一幀中的當(dāng)前緩沖區(qū)。這樣,交替使用這兩個(gè)緩沖區(qū)進(jìn)行流體表面的顯示。

2 與水面交互

為真實(shí)模擬水面波動(dòng),必須模擬水面波動(dòng)的開始(即水面的飛濺效果)和漂浮物體隨水面浮動(dòng)的效果。

2.1 飛濺

飛濺的效果可以通過在特定位置瞬時(shí)移動(dòng)一個(gè)或幾個(gè)Z值來創(chuàng)建。當(dāng)一個(gè)物體與流體表面接觸時(shí)(如投擲一塊磚頭)會(huì)引起流體表面的振動(dòng),這時(shí)流體表面的位置可以通過修改接觸點(diǎn)周圍頂點(diǎn)的位移直接得到。將離接觸點(diǎn)最近的點(diǎn)壓縮為一點(diǎn)可以獲得滿意的模擬結(jié)果。實(shí)驗(yàn)證明,將離接觸點(diǎn)最近的八個(gè)相鄰頂點(diǎn)壓縮為一點(diǎn)較為合適。

2.2 物體受力分析

漂浮在流體表面的物體被分解成M個(gè)相互連接的部分,由于每個(gè)部分對(duì)于該物體的任何其他部分都是不可平移或旋轉(zhuǎn)的,并且物體的質(zhì)心固定,因此我們將該物體當(dāng)作剛體對(duì)待。漂浮物體所受到的浮力等于它排出的水的重量。浮力的方向?qū)嶋H上是在氣壓剃度的方向上,在大多數(shù)情況下,取水面的法線方向就可以了。

在本系統(tǒng)中,將漂浮的物體外形看作由一組離散的點(diǎn)近似構(gòu)成,相鄰的一組點(diǎn)構(gòu)成一個(gè)區(qū)域片ΔAk,區(qū)域片的法向量為k,z。浮力通過對(duì)物體水下部分的體積積分來計(jì)算。水下部分物體排出的水的體積為

其中zwater是在PK的雙線性插值水面高度(可避免初級(jí)或一級(jí)間斷),雙線性插值可以避免可能產(chǎn)生的初級(jí)或一級(jí)間斷。在該位置的浮力Fk和轉(zhuǎn)動(dòng)力矩Nk分別為

這里rk是從質(zhì)心到pk的矢量,ρ為流體的密度。合力與轉(zhuǎn)動(dòng)力矩可以通過對(duì)每一個(gè)物體頂點(diǎn)分量的求和來獲得。頂點(diǎn)的數(shù)目決定物體的形狀和浮力的精確度。一般情況下,一個(gè)立方體可能需要20或30個(gè)點(diǎn),而一棵有分支的樹可能需要數(shù)百個(gè)點(diǎn)來真實(shí)表現(xiàn)。漂浮物體受力分析如圖3所示。

只受到重力和浮力的作用,即物體受力總和為浮力減去重力。為了保持物體在水面上的滑行,可以通過求每一個(gè)頂點(diǎn)的分量和來計(jì)算拉力:

速度項(xiàng)vk,rel是在rk處船體相對(duì)水的速度,它通過計(jì)算頂點(diǎn)b的水流速度vwater和剛體總速度(包括線速度vcm和角速度ωcm)的差值獲得。因此除高度值外,如果一個(gè)三維速度與每一個(gè)柵格區(qū)域相關(guān)聯(lián),水流就載著物體漂浮移動(dòng)。

2.3 流體表面法向量計(jì)算

為了正確地反映流體的流動(dòng)情況,要計(jì)算流體表面法向量,需要知道在每個(gè)頂點(diǎn)上的準(zhǔn)確法向量和切向量。在頂點(diǎn)(i, j)處,與x軸平行的切向量T和與y軸平行的切向量B可以表示為

法向量N(非規(guī)則化向量)可通過計(jì)算N=T×B得到,適當(dāng)放大(不會(huì)改變向量的方向)以消除分母,得到的最終表達(dá)式為

3 實(shí)驗(yàn)及其結(jié)論

根據(jù)上述算法,我們?cè)赩isual C++6.0平臺(tái)上,采用OpenGL進(jìn)行流體的模擬,實(shí)驗(yàn)?zāi)M對(duì)象為水面,大小為128×128,水面的阻力系數(shù)值μ=0.001,以保證波的震蕩時(shí)間較長。圖4為開始時(shí)流體平靜的狀態(tài),物體靜止在水面上。圖5 為水面中剛引入飛濺時(shí)的效果。圖6、圖7為飛濺后不同時(shí)期的水面震蕩效果對(duì)比。其中圖6表明水波剛傳播到漂浮的物體處,引起物體隨著水波上下移動(dòng);圖7表明物體被水波推動(dòng),引起水平的移動(dòng),并隔斷水波的傳遞,使其無法傳播到物體身后的區(qū)域。

本系統(tǒng)中假設(shè)水域的邊界是垂直的,波浪從邊界反射回來幾乎不損失能量。圖8是飛濺后,水波經(jīng)過邊界多次反射和疊加后的整個(gè)場景效果。

本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。

主站蜘蛛池模板: 亚洲色无码专线精品观看| 日本不卡免费高清视频| 亚洲香蕉伊综合在人在线| 国产精品成人第一区| 成人va亚洲va欧美天堂| 亚洲视频免费在线| 中文字幕亚洲乱码熟女1区2区| 久久96热在精品国产高清| 国产国语一级毛片在线视频| 91精品国产自产91精品资源| 久久人搡人人玩人妻精品| 国产精欧美一区二区三区| 深夜福利视频一区二区| 久久99国产精品成人欧美| 久久精品国产91久久综合麻豆自制| 亚洲六月丁香六月婷婷蜜芽| 色噜噜综合网| 国产微拍精品| 波多野结衣中文字幕久久| 欧美一级在线看| 亚洲欧美成人在线视频| 欧美伊人色综合久久天天| 91九色国产porny| 亚洲成人精品久久| 国产精品原创不卡在线| 久久国产精品国产自线拍| 亚洲第一视频区| 又爽又大又黄a级毛片在线视频 | 伊人婷婷色香五月综合缴缴情| 国产成人一区在线播放| 亚洲精品无码日韩国产不卡| 日本www在线视频| 亚洲成人播放| 五月天福利视频| 亚洲综合九九| 天堂成人在线| 欧美人与牲动交a欧美精品| 成人va亚洲va欧美天堂| 色欲色欲久久综合网| 蜜芽国产尤物av尤物在线看| 日本三区视频| 亚洲香蕉在线| 456亚洲人成高清在线| 99在线视频免费观看| 91成人在线观看| 老色鬼久久亚洲AV综合| 国产综合网站| 国内精品九九久久久精品| 久久国产精品夜色| 三上悠亚一区二区| 国产成人91精品免费网址在线| 亚洲国产天堂久久综合226114| 国产精品区视频中文字幕| 亚洲一区二区三区在线视频| 亚洲成人精品在线| 亚洲美女一级毛片| 欧美第二区| 国产成人免费手机在线观看视频| 18禁高潮出水呻吟娇喘蜜芽| 国产成人福利在线| av在线无码浏览| 精品久久国产综合精麻豆 | 伊人久久久久久久| 美女被躁出白浆视频播放| 尤物成AV人片在线观看| 国产精品女主播| 久久国产拍爱| 最新精品国偷自产在线| 伊人久热这里只有精品视频99| 91高清在线视频| 精品久久蜜桃| 欧美福利在线| 午夜福利网址| 亚洲香蕉伊综合在人在线| 亚洲综合极品香蕉久久网| 无码精品国产VA在线观看DVD| 丝袜高跟美脚国产1区| 亚洲中文字幕23页在线| 国产网友愉拍精品视频| 精品三级在线| 亚洲午夜福利精品无码| AV不卡无码免费一区二区三区|