前言
最近想要实现雾化效果,但是百度了下基本是使用了glut工具包的文章。确实使用glut能很快的实现对应的效果,但是也有缺点。
- 使用了glut就不能使用glfw了
- 使用了glut去实现只是调用一个API,很难知道对应的原理是什么
一、雾化效果是什么?
如图显示
二、着色器源码
1.先上着色器源码
代码如下(示例):
float dist = abs( fs_in.FragPos.z - viewPos.z);
float fogFactor = (maxDist - dist) / (maxDist - minDist) * isFog;
fogFactor = clamp( fogFactor, 0.0, 1.0 );
lighting = mix(vec3(fogColor), lighting, fogFactor);
2.解析源码内容
计算顶点的深度到摄像机深度的绝对位置差距
float dist = abs( fs_in.FragPos.z - viewPos.z);
可配置参数maxDist、minDist
maxDist代表最远的距离,此时茶壶会完全消失不见。
minDist代表最近的距离,此时茶壶会显示原有的色彩
float fogFactor = (maxDist - dist) / (maxDist - minDist) * isFog;