问题:
在加入了天空盒子之后,可以看到,图中的雾效是非常不真实的,因为在有雾的情况下, 站在观察者的角度,远处的物体应该是由近及远越来越模糊的,而这幅图完全没有表现出这个特点。
解决方法:
原理,正如前面所说,越是靠近地面的物体,雾越浓(也就是越能表现出雾的颜色),往高处,才会慢慢凸物体,最上层(超过某个高度)则是物体本身的颜色或者天空盒子的颜色,如下图所示:
因此,在shader代码中自定义出两个高度,然后根据相应的高度来计算颜色,核心代码:
#version 400
in vec3 textureCoords;
out vec4 out_Color;
uniform samplerCube cubeMap;
uniform samplerCube cubeMap2;
uniform float blendFactor;
const float upperLimit = 50.0;
const float lowerLimit = 30.0;
const float length = upperLimit - lowerLimit;
//color of fog
uniform vec3 fogColor;
void main(void){
vec4 color1 = texture(cubeMap, textureCoords);
vec4 color2 = texture(cubeMap2, textureCoords);
vec4 finalColor = mix(color1,color2,blendFactor);
float factor = (textureCoords.y - lowerLimit) / ( upperLimit - lowerLimit );
factor = clamp(factor,0.0,1.0);
out_Color = mix(vec4(fogColor,1.0), finalColor, factor);
}
解决后: