標籤:

用OpenGL模擬一個水面的(涉及流速和壓強)大概需要哪幾步?

如題,畢業設計,目前還沒有頭緒,希望先了解一下大致步驟,最重要的是想知道有多少工作量需要多久


問題提供的信息很不足,我只能猜。

你說的應該是模擬,而不是渲染,才會需要流速和壓強?那樣的話,就不能用FFT的方法了,得用Navier–Stokes方程來解流體。這裡有個參考 GPU Gems - Chapter 38. Fast Fluid Dynamics Simulation on the GPU。


看你需要什麼樣的水面。實時渲染水面一般有以下幾個點:

1.反射rt:攝像機乘上水面平面的反射矩陣反繞序渲染一遍場景。

2.折射rt:同上,不同的是乘上折射矩陣。

3.水下霧:以上兩張rt根據攝像機遠近疊加(一般是菲涅爾公式*攝像機距離),攝像機越遠,反射越多,折射越少。

4.波浪:一般有兩種方式,第一種是法線貼圖,取法線與攝像機距離的點積決定折射度,取法貼uv偏移做水流動。第二種fft波計算網格頂點,模擬真實波浪。推薦後一種,較真實,能交互。

5:亮斑:我的做法是直接高光貼圖+鏡面反射計算。(看起來效果不太理想,你要做可以查其它資料)。

6.水紋投射:fft波網格做個描邊。

以下是一個webgl的水演示:http://madebyevan.com/webgl-water/


你要做模擬還是渲染;做模擬的話和 OpenGL 無關

如果模擬的話,簡單來說寫一個淺水方程,然後寫一個差分方式。這個比較簡單,基本上只是一個大作業的難度(因為我大作業寫得就是這個)

主要是兩點:

1. 為了防止 blow-up 一般需要用 spectral method 濾掉高頻;或者用粒子採樣+Kernel Function(似乎叫做 SPL 方法)

2. 格點選擇;pressure/temperature grids和 velocity grids需要差 1/2;當然用 SPL 方法就不要管這個

3. 時間差分;不過如果 project 夠簡單可以直接上 RK4 無腦擼,但是現實中一般會用 implicit 或者 half implicit 方法擼

如果要節省時間需要 MPI 幫助。

你可以考慮看本 計算流體力學 的書;或者去你們的 Applied Math 或者 Physics 或者 Engineering 抓相關老師問問


比較簡單的方法:《GPU Gems》中介紹的採用疊加Gerstner波的方法來渲染水面。

主要步驟:

1.通過數學方法產生水面的網格。

2.添加水面的材質。

3. 增加光照計算。

還有用FFT方法的。

參考:水面的簡單渲染 – Gerstner波:水面的簡單渲染


推薦閱讀:

遊戲建模的素材圖在哪裡找?
請問國內有沒有比較好的開源3D模型庫?
Substance 工具套的流行程度如何?
能否通過六面照片構建3D模型?比如人臉,全身的多角度照片,生成3D模型。?
用三維滑鼠建模、操作電腦體驗如何?

TAG:3D | OpenGL | 3D建模 |