我正在用openGL编写GUI库,并决定添加圆角,因为我觉得它给单元带来了更加专业的外观。我已经实现了通用]]
length(max(abs(p) - b, 0.0)) - radius
方法,它几乎可以完美地工作,除了在拐角处看起来好像被拉长以外:
我的片段着色器:
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之间的标量,代表矩形相对于屏幕的宽度和高度),该矩形几乎完全消失了:
我正在用openGL编写GUI库,并决定添加圆角,因为我觉得它给单元带来了更加专业的外观。我已经实现了通用长度(max(abs(p)-b,0 ....
我假定passTexCoords
是范围[0,1]中的纹理坐标。并且width
和height
是屏幕的大小。scaleX and
scaleY`是绿色区域与屏幕尺寸的比率: