問題:
在加入了天空盒子之後,可以看到,圖中的霧效是非常不真實的,因爲在有霧的情況下, 站在觀察者的角度,遠處的物體應該是由近及遠越來越模糊的,而這幅圖完全沒有表現出這個特點。
解決方法:
原理,正如前面所說,越是靠近地面的物體,霧越濃(也就是越能表現出霧的顏色),往高處,纔會慢慢凸物體,最上層(超過某個高度)則是物體本身的顏色或者天空盒子的顏色,如下圖所示:
因此,在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);
}
解決後: