GLSL着色器绘图线条厚度不均:归一化后失真问题求助
图形绘制着色器线条厚度不一致问题
编写简单的图形绘制着色器时遇到线条厚度无法保持一致的问题:
- 不归一化时,数值差较小的区域线条偏厚
- 归一化后,图形出现严重失真
着色器代码
#version 460 core layout(location = 0) out vec4 color; in vec4 gl_FragCoord; uniform vec2 Screen_Size; uniform vec2 zoom; uniform vec2 offset; #define GRAPHCOLOR vec3(0.176, 0.439, 0.701) float leftside(vec2 pos) { return(pos.y); } float rightside(vec2 pos) { return(pos.x); } vec2 cameramat(vec2 pos) { return((pos - offset) * zoom); } void main() { float eps = (50.0*sqrt(zoom.x*zoom.y)) / 2000.0; vec2 pos = cameramat(2.0 * (gl_FragCoord.xy / Screen_Size) - vec2(1, 1)); vec3 _color = vec3(0.9, 0.9, 0.9); vec2 sides = (vec2(leftside(pos), rightside(pos))); _color = mix(_color, vec3(0.70), step(abs(pos.x - float(int(pos.x))), 0.002 * zoom.x)); _color = mix(_color, vec3(0.70), step(abs(pos.y - float(int(pos.y))), 0.002 * zoom.y)); _color = mix(_color, vec3(0.4), step(abs(pos.x), 0.002 * zoom.x)); _color = mix(_color, vec3(0.4), step(abs(pos.y), 0.0025 * zoom.y)); _color = mix(_color, mix(_color, GRAPHCOLOR, step(abs((sides.x - sides.y)), eps / 2)),smoothstep(eps, 0, abs((sides.x - sides.y)))); color = vec4(_color, 0.9); }
示例图形
| 未归一化 x = y | 未归一化 50x = 50y | 未归一化 x = y | 归一化 50x = 50y |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
项目信息
完整项目为github上的graphcalc仓库
内容的提问来源于stack exchange,提问作者urisinger
相关产品推荐
相关产品推荐





