GLSL圆角矩形被拉伸

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

我正在用openGL编写GUI库,并决定添加圆角,因为我觉得它给单元带来了更加专业的外观。我已经实现了通用]]

length(max(abs(p) - b, 0.0)) - radius

方法,它几乎可以完美地工作,除了在拐角处看起来好像被拉长以外:

enter image description here

我的片段着色器:

in vec2 passTexCoords;

uniform vec4 color;
uniform int width;
uniform int height;
uniform int radius;    

void main() {
    fragment = color;

    vec2 pos = (abs(passTexCoords - 0.5) + 0.5) * vec2(width, height);

    float alpha = 1.0 - clamp(length(max(pos - (vec2(width, height) - radius), 0.0)) - radius, 0.0, 1.0);

    fragment.a = alpha;
}

拉伸对我来说确实有意义,但是当我替换为

vec2 pos = (abs(passTexCoords - 0.5) + 0.5) * vec2(width, height) * vec2(scaleX, scaleY);

float alpha = 1.0 - clamp(length(max(pos - (vec2(width, height) * vec2(scaleX, scaleY) - radius), 0.0)) - radius, 0.0, 1.0);

((scaleX和scaleY是介于0.0和1.0之间的标量,代表矩形相对于屏幕的宽度和高度),该矩形几乎完全消失了:

enter image description here

我正在用openGL编写GUI库,并决定添加圆角,因为我觉得它给单元带来了更加专业的外观。我已经实现了通用长度(max(abs(p)-b,0 ....

opengl glsl rounded-corners
1个回答
0
投票

我假定passTexCoords是范围[0,1]中的纹理坐标。并且widthheight是屏幕的大小。scaleX andscaleY`是绿色区域与屏幕尺寸的比率:

© www.soinside.com 2019 - 2024. All rights reserved.