网格线宽度不均匀

问题描述 投票:0回答:0

我正在使用以下片段着色器代码绘制网格:

precision highp float;

uniform vec2 CANVAS_SIZE;
uniform float GRID_WIDTH;
uniform vec4 GRID_COLOR;

float isGridLine(float ordinate, float target, float halfThickness) {
    return step(ordinate, target + halfThickness) * step(target - halfThickness, ordinate);
}

void main() {
    vec2 uv = (gl_FragCoord.xy / CANVAS_SIZE);
    float halfGridWidth = GRID_WIDTH / 2.0;
    float gridLine = 0.0;
    for (float i = 0.0; i < 1.0; i += 0.05) {
        gridLine += isGridLine(uv.y, i, halfGridWidth);
        gridLine += isGridLine(uv.x, i, halfGridWidth);
    }
    gl_FragColor = mix(vec4(uv.rg, 0.0, 1.0), GRID_COLOR, step(1.0, gridLine));
}

顶点着色器使用 JavaScript 代码提供的顶点位置简单地创建一个静态网格。它生成一个填充视口的平面。

precision highp float;
attribute vec2 _vertexPosition;

void main() {
    gl_Position = vec4(_vertexPosition, 0.0, 1.0);
}

但是,我遇到了一个问题,即每第 5 条网格线显得稍粗。奇怪的是,片段着色器不包含第 5 行的任何特定逻辑。

以下是我到目前为止的观察:

我考虑过这个问题可能与float精度有关,但无论使用低精度还是高精度,它都存在。 我还用不同的屏幕分辨率测试了着色器,但差异仍然一致。 谁能帮我理解为什么这些线有不同的宽度?

图片:

javascript graphics glsl shader webgl
© www.soinside.com 2019 - 2024. All rights reserved.