qt opengl 雾特效

30 篇文章 11 订阅

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

雾化因子计算方法如下:

        

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

   大部分代码为上一节的内容,这里就不再做介绍了。只介绍雾的部分了

在上一节的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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值