- OpenGL FBO(Frame Buffer Object)製作水面反射(Reflection map)、折射(Refraction map)。
- 依據當下Camera位置,於相同位置但限制Refraction View確保可觀察水面正下方,並繪製Refraction Map。
主Camera觀察角度較遠離水面時 | 主Camera觀察角度較面向水面時 |
- Reflection View使用當下Camera位置與水面鏡射位置繪製Reflection Map。
反射永遠為主Camera以水面鏡射位置 |
- 依據陽光方向繪製Depth Map用以製作陰影,繪製Depth Map時只會只物體背面(glCullFace(GL_BACK);)。
- 模擬2D波動參考"Wave equation - Wikipedia",每偵更新2次微分數值計算ODE。因此若時間間隔(ODE中各項係數設定)錯誤,可能使其結果發散無法正確模擬。於/source code/pythonWaveSimulation/中為ODE公式驗證Python程式,並設定ODE中各項系數。
- 使用Compute Shader計算波動,原先為於CPU計算完畢後已Texture2D傳入GPU使用。(2022/11/27)
Title : 顯示目前偵率。
User Manual : 基本操作提示。
(1) ESC 關閉程式。
(2) F1 隱藏GUI。
(3) WASD 控制視角水平移動。
(4) - = 調整移動速度。
(5) 滑鼠右鍵拖曳旋轉視角。
(6) 滑鼠左鍵可在模擬時產生水波。
Water : 調整水面參數。
Sun light : 調整光源參數。
以 Sin 函數製作水波 | 水波模擬 |
以 Height Map 製作水波 | 水中焦散效果 |
使用PBO(Pixel Buffer Object)減少模擬結果傳遞至GPU時間。(2022/11/27)使用多個FBO或Compute Shader直接於GPU模擬水面波動。(2022/11/27)- Height map貼圖動畫從多個2D Textures改為使用單個3D Texture。
- perlin noise製作水面波浪。