【发布时间】:2019-09-05 00:13:26
【问题描述】:
是否可以在垂直轴上的任何选定位置绘制一条具有单个像素高度的完美水平线,并将片段着色器应用于屏幕对齐的四边形?
我找到了许多具有平滑步骤或更复杂功能的解决方案,但我正在寻找一种优雅而快速的方法。
我提出的一个解决方案是使用指数函数并使其更陡峭,但它有许多我不想要的缺点(由于指数函数,这条线实际上不是一个像素高度,而且很难得到一个正确的),这是GLSL代码:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
// a centered horizontal line
float v = pow(uv.y - 0.5, 2.);
// make it steeper
v *= 100000.;
// make it white on a black background
v = clamp(1. - v, 0., 1.);
fragColor = vec4(v);
}
这是执行此操作的 shadertoy 代码:https://www.shadertoy.com/view/Ms2cWh
我想要什么:
- 以像素为单位或标准化绘制到特定 Y 位置的完美水平线
- 其强度限制在 [0, 1] 范围内,无需钳位
- 一种快速的方法
【问题讨论】:
标签: opengl-es glsl webgl shader