Skip to content

KenLo51/WaterSurface-OpenGL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 

Repository files navigation

WaterSurface-OpenGL

  1. OpenGL FBO(Frame Buffer Object)製作水面反射(Reflection map)、折射(Refraction map)。
  2. 依據當下Camera位置,於相同位置但限制Refraction View確保可觀察水面正下方,並繪製Refraction Map。
主Camera觀察角度較遠離水面時 主Camera觀察角度較面向水面時
  1. Reflection View使用當下Camera位置與水面鏡射位置繪製Reflection Map。
反射永遠為主Camera以水面鏡射位置
  1. 依據陽光方向繪製Depth Map用以製作陰影,繪製Depth Map時只會只物體背面(glCullFace(GL_BACK);)。
  2. 模擬2D波動參考"Wave equation - Wikipedia",每偵更新2次微分數值計算ODE。因此若時間間隔(ODE中各項係數設定)錯誤,可能使其結果發散無法正確模擬。於/source code/pythonWaveSimulation/中為ODE公式驗證Python程式,並設定ODE中各項系數。
  3. 使用Compute Shader計算波動,原先為於CPU計算完畢後已Texture2D傳入GPU使用。(2022/11/27)

Libraries

  1. Glad
  2. GLFW
  3. OpenGL 4.3
  4. tinyobjloader
  5. Dear ImGui

使用素材

  1. Floor Tiles 09

功能說明

Title : 顯示目前偵率。
User Manual : 基本操作提示。

(1) ESC 關閉程式。
(2) F1 隱藏GUI。
(3) WASD 控制視角水平移動。
(4) - = 調整移動速度。
(5) 滑鼠右鍵拖曳旋轉視角。
(6) 滑鼠左鍵可在模擬時產生水波。

Water : 調整水面參數。
Sun light : 調整光源參數。

運行結果

以 Sin 函數製作水波 水波模擬
以 Height Map 製作水波 水中焦散效果

Python中模擬2維波動結果

待做

  1. 使用PBO(Pixel Buffer Object)減少模擬結果傳遞至GPU時間。(2022/11/27)
  2. 使用多個FBO或Compute Shader直接於GPU模擬水面波動。(2022/11/27)
  3. Height map貼圖動畫從多個2D Textures改為使用單個3D Texture。
  4. perlin noise製作水面波浪。

Releases

No releases published

Packages

No packages published

Languages