本發(fā)明涉及一種液體模擬方法,尤其涉及一種用于虛擬實驗的液體柱模擬方法。
背景技術:
:虛擬實驗(也稱為虛擬現(xiàn)實實驗)是指借助于多媒體、仿真和虛擬現(xiàn)實(又稱VR)等技術在計算機上營造可輔助、部分替代甚至全部替代傳統(tǒng)實驗各操作環(huán)節(jié)的相關軟硬件操作環(huán)境的實驗,實驗者可以像在真實的環(huán)境中一樣完成各種實驗項目,所取得的實驗效果等價于甚至優(yōu)于在真實環(huán)境中所取得的效果。液體模擬一直是虛擬實驗系統(tǒng)真實表現(xiàn)系統(tǒng)環(huán)境的重要方式,甚至成為很多開發(fā)人員選擇圖形引擎的參考標準。在沉浸式三維虛擬實驗應用場景中,燒杯、試管、試劑瓶等容器內的液體都需要能夠真實模擬液體高度跟隨容器變化而變化的效果。目前,液體模擬的方法大體可分為基于網格的歐拉模型和基于粒子的拉格朗日模型兩類,其中,光滑粒子流體動力學(SmoothedParticleHydrodynamics,SPH)方法表現(xiàn)自由液體動態(tài)過程十分出色,近年來成為技術主流。但是,這種基于粒子的方法通常具有較大的時間開銷,尤其在粒子數(shù)量較大的時候對計算機運行速度有較高要求。基于歐拉網格的流體模擬也得到了大量研究,比如,孫曉鵬(孫曉鵬,李翠芳,“三維游戲中基于OGRE的動態(tài)水面模擬算法”,《計算機工程與設計》,32(12):4122~4124,2011)依據(jù)力矩和表面張力建立水波方程控制Mesh網格平面較好的模擬了水面漣漪現(xiàn)象;丁振(丁振,苪小平,劉真余等,“基于中心差分法的理想水體三維運動效果的模擬”,《中國科學院研究生院學報》,30(1):33~39,2013)等采用中心差分法平滑因子和布朗運動模型建立水面動態(tài)方程,實現(xiàn)了大規(guī)模水面動態(tài)仿真。網格的方法模擬液面具有速度快,水波效果真實的優(yōu)點,但缺點是受限于網格面由許多基本單元小平面相鄰拼接在一起、無厚度的性質,只能模擬一個面的動態(tài)效果,不能表達具有液柱高度的流體內部變化過程和液柱深度信息,無法模擬燒杯中有色液體在杯中晃動的過程,所以網格模擬液面時攝像機視角一般為向下觀看水面?;诹W拥姆椒苷鎸嵞M水滴的自然流動過程和液體在容器內晃動效果,但缺點是模擬過程依賴于大量碰撞檢測以表現(xiàn)粒子間相互作用的效果發(fā)生大量碰撞檢測,在粒子數(shù)較多時需要大量的計算和時間消耗,容易在快速移動液體容器時出現(xiàn)滯后和碰撞漏檢測,從而發(fā)生“漏液”現(xiàn)象。技術實現(xiàn)要素:本發(fā)明的目的就在于為了解決上述問題而提供一種能夠讓液柱在容器傾斜、旋轉時始終無誤差地保持水面水平的用于虛擬實驗的液體柱模擬方法。本發(fā)明通過以下技術方案來實現(xiàn)上述目的:一種用于虛擬實驗的液體柱模擬方法,包括以下步驟:(1)初始化容器內圓柱形液體柱體積,得到圓柱高度值;(2)捕捉影響液體體積發(fā)生變化的事件,計算變化后的溶液體積,并更新液體體積值;(3)在世界坐標系OXYZ中,設水平面法向量為令將按照坐標轉換公式轉換到液柱自身坐標系oxyz中得到(4)在oxyz坐標系中,世界坐標系的水平面α包含點o′=(x0,y0,z0),據(jù)此通過點法式表示該平面方程如下:a(x-x0)+b(y-y0)+c(z-z0)=0;(5)對液柱頂面的所有網格點P=(x1,y1,z1),將其投影到平面α上得到該網格點真實坐標;(6)將更新后的液柱頂面高度及輪廓信息發(fā)送給傳統(tǒng)液面模擬算法,模擬出具有任意深度的液柱動態(tài)效果。作為優(yōu)選,所述步驟(3)中,將轉換到液柱自身坐標系得到的轉換公式為:(a,b,c,1)=(0,1,0,1)cosθzsinθz00-sinθzcosθz000010000110000cosθxsinθx00-sinθxcosθx00001]]>上式中,θz為oxyz的x軸與OXYZ的X軸所成夾角;θx為oxyz的z軸與OXYZ的Z軸所成夾角;求得即為oxyz坐標系中表示的世界坐標系水平面的法向量。所述步驟(5)中,投影過程如下式所示:y=y0-a(x-x0)+c(z-z0)b,b≠0y,b=0ory>ym]]>上述中,ym為液柱最大深度;如果b=0或者計算得到的y>ym,則保持網格點坐標不變;使用坐標投影的方法可以保證在模擬液體液面保持水平的過程中不會出現(xiàn)尋找液面最低點的誤差,模擬實時性強。本發(fā)明的有益效果在于:1、向量的坐標系轉換,將世界坐標系中的豎直方向向量轉換到液柱自身坐標系,快速獲取水平面法向量的表示;2、快速求解世界坐標系中水平面在液柱體自身坐標系中的表示方法,根據(jù)液柱上表面中心點經過該水平面并結合法向量坐標將水平面用點法式方程表示;3、平面投影法快速解算水平面坐標,在液柱自身坐標系上將液柱上表面投影到水平面上,從而快速解出液柱保持水平面的狀態(tài);4、整個模擬過程無需碰撞檢測,計算過程快速易于實現(xiàn),模擬效率高;5、通過給液柱賦予逼真液體效果的材質貼圖即可模擬真實溶液,在透明容器容納液體的應用場合十分適用。附圖說明圖1是本發(fā)明的圓柱形液柱網格效果示意圖;圖2是本發(fā)明的液柱傾斜的二維模擬示意;圖3-1是本發(fā)明的液柱自身坐標系示意圖;圖3-2是本發(fā)明的液柱在世界坐標系OXYZ中旋轉示意圖。具體實施方式下面結合附圖對本發(fā)明作進一步說明:本發(fā)明所述用于虛擬實驗的液體柱模擬方法,包括以下步驟:(1)初始化容器內圓柱形液體柱體積,得到圓柱高度值;(2)捕捉影響液體體積發(fā)生變化的事件,計算變化后的溶液體積,并更新液體體積值;(3)在世界坐標系OXYZ中,設水平面法向量為令將按照坐標轉換公式轉換到液柱自身坐標系oxyz中得到轉換公式為:(a,b,c,1)=(0,1,0,1)cosθzsinθz00-sinθzcosθz000010000110000cosθxsinθx00-sinθxcosθx00001]]>上式中,θz為oxyz的x軸與OXYZ的X軸所成夾角;θx為oxyz的z軸與OXYZ的Z軸所成夾角;求得即為oxyz坐標系中表示的世界坐標系水平面的法向量;(4)在oxyz坐標系中,世界坐標系的水平面α包含點o′=(x0,y0,z0),據(jù)此通過點法式表示該平面方程如下:a(x-x0)+b(y-y0)+c(z-z0)=0;(5)對液柱頂面的所有網格點P=(x1,y1,z1),將其投影到平面α上得到該網格點真實坐標,投影過程如下式所示:y=y0-a(x-x0)+c(z-z0)b,b≠0y,b=0ory>ym]]>上述中,ym為液柱最大深度;如果b=0或者計算得到的y>ym,則保持網格點坐標不變;(6)將更新后的液柱頂面高度及輪廓信息發(fā)送給傳統(tǒng)液面模擬算法,模擬出具有任意深度的液柱動態(tài)效果。為了便于理解,下面結合附圖對本發(fā)明模擬過程的原理進行具體解釋。本發(fā)明采用圓柱形液柱模擬容器內的液體形狀,液柱網格形狀如圖1所示。為容易理解液體傾斜過程柱狀液體變化過程,首先通過側面觀看到的圓柱形液柱上表面保持水平的二維過程進行介紹。圖2示出了二維模擬液柱變化,矩形在傾斜旋轉過程保持一條邊與水平線平行。圖2中,矩形繞底邊中心O點旋轉,并且保持原矩形頂邊與水平線保持平行,如(b)和(c)所示。在頂邊與底邊未相交時,容易看出通過“割補法”可以將旋轉后的圖形復原為(a)中的標準矩形,因此可以證明圖形在旋轉變化過程中面積不變。將圖2情況擴展到三維,設圓柱體在三維空間任意旋轉傾斜,并且保持頂面始終與水平面平行,則在原圓柱頂面與底面不相交的過程可通過割補還原為圓柱體,且該圓柱體相較于原圓柱體底面積和高都沒有發(fā)生改變,故而旋轉前后體積不變,該變換過程很好的模擬了液柱體的動態(tài)變化,如圖3-1和圖3-2所示。圖3-1是液柱自身坐標系,以底面圓心為坐標原點,頂面圓心方向為y軸建立右手坐標系oxyz。該坐標系將跟隨液柱一起平移、旋轉。圖3-2為液柱在世界坐標系OXYZ中旋轉示意圖。世界坐標系即我們觀察到的環(huán)境坐標系,是Y軸保持豎直向上的右手坐標系。從上一節(jié)的分析可知,如果旋轉過程液柱體積保持不變,則oo′長度不變,液柱保持液面水平的過程可描述為世界坐標系中過頂面圓心的水平面α將液柱截成兩部分,下半部分即為動態(tài)變化的液柱體。具體實現(xiàn)過程分為兩步:首先過o′點求出世界坐標系中的水平面在液柱自身坐標系中的表示α,然后在自身坐標系中將液柱體頂面網格點坐標投影到α平面上。上述實施例只是本發(fā)明的較佳實施例,并不是對本發(fā)明技術方案的限制,只要是不經過創(chuàng)造性勞動即可在上述實施例的基礎上實現(xiàn)的技術方案,均應視為落入本發(fā)明專利的權利保護范圍內。當前第1頁1 2 3