【问题标题】:Range Based Fog in GLSLGLSL 中基于范围的雾
【发布时间】:2015-01-12 09:40:11
【问题描述】:

我发现许多帖子表明可以使用 gl_Position.z 或 gl_FragCoord.z/gl_FragCoord.w 轻松获得雾片段距离。

问题是这在雾开始的地方形成了一个边界。

我想要做的是根据玩家的位置确定这个距离,以便玩家周围有一个雾半径。

为简单起见,我希望根据世界空间中像素与 (0, 0, 0) 的距离对雾进行插值。只有该坐标的fog_end 内的像素是可见的。

【问题讨论】:

    标签: glsl fog


    【解决方案1】:

    您可以在边界处插入雾。

    //distance of fragment in worldspace
    float distance = ...;
    
    float fog_start = 10;
    float fog_end = 20;
    
    //linear interpolation
    float fog_factor = (distance-fog_start)/(fog_end-fog_start);
    fog_factor = clamp(fog_factor,0,1);
    
    //add 'white fog' to color
    out_color += vec4(fog_factor);
    

    世界空间距离可以通过将视图空间中的顶点传递给片段着色器并计算长度来获得。

    【讨论】:

    • 我真的不确定这是否有帮助。玩家的坐标在哪里出现?
    【解决方案2】:

    经过一番搜索,我发现我所指的是基于范围的雾而不是基于平面的雾。

    我还遇到了一个问题,即必须使用很少的顶点才能使其正常工作。因此距离计算需要在片段着色器中。

    可以在此处找到一些有用的详细信息。
    http://web.archive.org/web/20160615092925/http://in2gpu.com/2014/07/22/create-fog-shader/

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2015-02-23
      • 2021-04-26
      • 2012-02-18
      • 1970-01-01
      • 2016-10-31
      • 2011-10-11
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多