大家好
由于我目前正在制作的游戏(+简易游戏引擎
需要制作水面的渲染(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
希望也能有人分享一些相关的资料
感谢您耐心的阅读