基于Qt的OpenGL可编程管线学习(19)-雾-创新互联
雾的效果,这里只对牛头的模型进行了雾化,如下图所示
10年积累的做网站、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有临澧免费网站建设让你可以放心的选择与我们合作。距离模型越近,越清晰
1、线性雾
fragment shader中实现效果,
参数为眼睛到平面的距离,需要传入雾的起始位置和终止位置
float calcFogLinear(float distance) { float fogAlpha = (distance - M_FogStart) / (M_FogEnd - M_FogStart); fogAlpha = 1.0 - clamp(fogAlpha, 0.0, 1.0); return fogAlpha; }
2、EXP雾
fragment shader中实现,需要传入雾的浓度
float calcFogExp(float distance) { float fogAlpha = exp(-(distance * M_FogDensity)); fogAlpha = clamp(fogAlpha, 0.0, 1.0); return fogAlpha; }
3、EXPX雾
fragment shader中实现,需要出入雾的浓度和梯度
float calcFogExpX(float distance) { float fogAlpha = exp(-pow(distance * M_FogDensity, M_FogGradiant)); fogAlpha = clamp(fogAlpha, 0.0, 1.0); return fogAlpha; }
眼睛的位置计算
M_EyesPos = V * wordPos;
fragment shader
// 计算雾的强度 // 线性计算 //float fogAlpha = calcFogLinear(abs(M_EyesPos.z / M_EyesPos.w)); // EXP方式计算 //float fogAlpha = calcFogExp(abs(M_EyesPos.z / M_EyesPos.w)); // EXPX方式计算 float fogAlpha = calcFogExpX(abs(M_EyesPos.z / M_EyesPos.w)); vec4 lightColor = texture2D(U_MainTexture, M_coord) * ambientColor + texture2D(U_MainTexture, M_coord) * diffuseColor;// + specularColor; gl_FragColor = mix(M_FogColor, lightColor, fogAlpha);
CPU端雾的设置
// 设置雾 float nFogStart = 1.0f; float nFogEnd = 500.0f; float nFogColor[] = {41.0f / 255.0f, 71.0f / 255.0f, 121.0f / 255.0f, 1.0f}; float nFogDensity = 0.008f; // 雾的强度 float nFogGradiant = 2.0f; // 雾的衰减梯度 OpenGLCore->glUniform1f(m_Mode2->getLocationHandle("M_FogStart"), nFogStart); OpenGLCore->glUniform1f(m_Mode2->getLocationHandle("M_FogEnd"), nFogEnd); OpenGLCore->glUniform4fv(m_Mode2->getLocationHandle("M_FogColor"), 1, nFogColor); OpenGLCore->glUniform1f(m_Mode2->getLocationHandle("M_FogDensity"), nFogDensity); OpenGLCore->glUniform1f(m_Mode2->getLocationHandle("M_FogGradiant"), nFogGradiant);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:基于Qt的OpenGL可编程管线学习(19)-雾-创新互联
分享地址:http://lswzjz.com/article/edjsh.html