GLSL中基于范围的雾

时间:2015-01-12 09:40:11

标签: glsl fog

我发现了一些帖子,说明使用gl_Position.z或gl_FragCoord.z / gl_FragCoord.w可以轻松获得雾片段距离。

问题在于这是雾开始的边界。

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

为简单起见,我希望根据像素距世界空间(0,0,0)的距离来插入雾。只有此坐标的fog_end内的像素可见。

2 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:0)

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

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

这里可以找到一些有用的细节 http://in2gpu.com/2014/07/22/create-fog-shader/