【问题标题】:OpenGL 3.3 GLSL Fragment Shader Fog effect not workingOpenGL 3.3 GLSL 片段着色器雾效果不起作用
【发布时间】:2014-08-12 22:00:34
【问题描述】:

我正在尝试在 OpenGL 3.3 中为我的场景添加雾效果。我尝试关注this tutorial。但是,我似乎无法在我的屏幕上获得相同的效果。似乎发生的一切是我的对象变暗了,但屏幕上没有灰色的雾气。可能是什么问题呢?

这是我的结果。

什么时候应该是这样的:

这是我的带有多个光源的片段着色器。它工作正常,没有任何雾。所有 GLSL 变量均已设置并正常工作。

 for (int i = 0; i < NUM_LIGHTS; i++)
{   
    float distance = length(lightVector[i]);

    vec3 l; 

    // point light

    attenuation = 1.0 / (gLight[i].attenuation.x + gLight[i].attenuation.y * distance + gLight[i].attenuation.z * distance * distance);
    l = normalize( vec3(lightVector[i]) );

    float cosTheta = clamp( dot( n, l ), 0,1 );
    vec3 E = normalize(eyeVector);
    vec3 R = reflect( -l, n );
    float cosAlpha = clamp( dot( E, R ), 0,1 );

    vec3 MaterialDiffuseColor = v_color * materialCoefficients.diffuse;
    vec3 MaterialAmbientColor = v_color * materialCoefficients.ambient;

    lighting += vec3(
        MaterialAmbientColor
        + (
            MaterialDiffuseColor * gLight[i].color * cosTheta * attenuation
        )
        + (
            materialCoefficients.specular * gLight[i].color * pow(cosAlpha, materialCoefficients.shininess) 
        ) 
    );
}

float fDiffuseIntensity = max(0.0, dot(normalize(normal), -gLight[0].position.xyz));
color = vec4(lighting, 1.0f) * vec4(gLight[0].color*(materialCoefficients.ambient+fDiffuseIntensity), 1.0f);

float fFogCoord = abs(eyeVector.z/1.0f);
color = mix(color, fogParams.vFogColor, getFogFactor(fogParams, fFogCoord));

【问题讨论】:

    标签: opengl glsl fog


    【解决方案1】:

    两件事。

    首先您应该验证您的fogParams.vFogColor 值设置是否正确。最简单的方法是短路着色器并将color 设置为fogParams.vFogColor 并立即返回。如果场景是黑色的,那么您就知道您的雾色没有正确发送到着色器。

    其次,您需要消除天空盒。你可以简单地用雾的颜色设置 glClearColor() 而根本不使用天空盒,因为天空盒应该在任何地方都可见,你应该看到雾,对吧?更高级的用法可以修改天空盒着色器以根据 vec3 偏离水平的角度从雾移动到天空盒纹理,因此当仰望天空时(有点)可见,但水平看只是显示雾,并且有两者之间的平滑过渡。

    【讨论】:

    • 非常感谢! vFogColor 不工作。我添加了 glClearColor,它看起来好多了。能否请您更详细地指导我如何根据视角修改天空盒着色器以实现雾?你知道这方面的教程吗?
    猜你喜欢
    • 2015-02-23
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多