qt opengl 雾特效
雾特效实现非常简单,加入雾化因子的计算;然后,把片元颜色和雾化因子加权就可以了。
雾化因子计算方法如下:

我实现的效果如下:雾的颜色偏黄色。

大部分代码为上一节的内容,这里就不再做介绍了。只介绍雾的部分了
在上一节的shader中加入uCamera参数,用于计算雾因子
#version 330
uniform mat4 uPMatrix,uVMatrix,uMMatrix;
uniform vec3 uCamera;
layout (location = 0) in vec3 aPosition;
layout (location = 1) in vec2 aTexture;
smooth out vec2 vTextureCood;
smooth out float vFogFactor;float computeFogFactor(){float tmpFactor;float fogDistance = length(uCamera-(uMMatrix*vec4(aPosition,1)).xyz);//顶点到摄像机的距离const float end = 5;//雾结束位置const float start = 30;//雾开始位置
// tmpFactor = max(min((end- fogDistance)/(end-start),1.0),0.0);//用雾公式计算雾因子,线型tmpFactor = 1.0 - smoothstep(start,end,fogDistance);//用雾公式计算雾因子,非线型return tmpFactor;
}void main(void)
{gl_Position = uPMatrix * uVMatrix * uMMatrix * vec4(aPosition,1);vTextureCood = aTexture;vFogFactor = computeFogFactor();
}
在片元着色器中用雾因子做颜色加权
#version 330
uniform sampler2D sTexture;
in vec2 vTextureCood;
in float vFogFactor;
out vec4 fragColor;void main(void)
{vec4 objColor = texture2D(sTexture,vTextureCood);vec4 fogColor = vec4(0.97,0.76,0.03,1.0);//雾的颜色if(vFogFactor != 0.0){fragColor = objColor*vFogFactor + fogColor*(1.0-vFogFactor);}else{fragColor=fogColor;}
}
上一节的渲染器需要传入摄像机位置了,做适当添加;这个就不放代码了,加上就可以。
工程至此下载https://download.csdn.net/download/wanghualin033/10871372
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
