opengl霧效問題解決

問題:



在加入了天空盒子之後,可以看到,圖中的霧效是非常不真實的,因爲在有霧的情況下, 站在觀察者的角度,遠處的物體應該是由近及遠越來越模糊的,而這幅圖完全沒有表現出這個特點。

解決方法:

原理,正如前面所說,越是靠近地面的物體,霧越濃(也就是越能表現出霧的顏色),往高處,纔會慢慢凸物體,最上層(超過某個高度)則是物體本身的顏色或者天空盒子的顏色,如下圖所示:


因此,在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);
}

解決後:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章