作者:
tim099 (tim11251994)
2016-02-28 01:39:57大家好
由於我目前正在製作的遊戲(+簡易遊戲引擎
需要製作水面的渲染(render),因此找了相關的資料
目前以該教學網頁的方法做修改後去實作
連結:
https://tutorialsplay.com/opengl/2014/09/26/lesson-15-water
-with-opengl-on-the-gpu-with-glsl/
目前實作方法為,先生成水的mesh後儲存
(除非水產生變化,否則不進行修改,重複使用
接著由於水是半透明的,因此需要在非透明物體先render完後
才能進行render避免遮蓋後方物體
(因為depth test關係,水面雖然是透明
接著在vertex shader計算水波的高度(我是使用多個波進行重疊
需要的參數有時間,波長,波高,座標(目前vertex的世界座標,取x跟z
接著直接修改vertex高度(vertex的高度+=波高
我是在geometry shader用三角形兩邊向量cross取法向量
(其實應該有更好的方法,
最後在fragment shader用水的顏色(自己設定的..)
跟skymap(一個存背景圖的cubeMap)取出的反射顏色去混色
最後乘上亮度,設定水的透明度(我是抓0.85)
就完成簡易的水的渲染了
附上影片demo
https://youtu.be/8Ceof034DAY
github原始碼連結:
https://github.com/tim099/GameTest
希望也能有人分享一些相關的資料
感謝您耐心的閱讀