【发布时间】:2020-10-09 15:46:59
【问题描述】:
我的第一个问题已经结束。从那时起,我添加了一些代码并取得了一些进展。但是生成的渐变是圆形的,我目前不知道怎么把它变成正方形。
这是我目前的结果:
目标结果(沿着这些线):
这是我的片段着色器:
precision highp float;
varying vec2 vTextureCoord;
uniform float centerX;
uniform float centerY;
uniform vec4 colors[4];
uniform float steps[4];
void main() {
vec3 map = vec3(vTextureCoord, 1);
vec2 uv = map.xy;
float dist = distance(vTextureCoord, vec2(centerX, centerY));
highp vec4 col = colors[0];
for (int i = 1; i < 4; ++i) {
col = mix(col, colors[i], smoothstep(steps[i - 1], steps[i], dist));
}
float factor = max(abs(uv.x - centerX), abs(uv.y - centerY));
float c = 1. - max(abs(uv.x - centerX), abs(uv.y - centerY));
vec4 finalColor = vec4((col.r - factor), (col.g - factor), (col.b - factor), 1.);
gl_FragColor = finalColor;
}
传递的参数是:
颜色:[[1, 0, 0], [1, 1, 1], [1, 0, 0], [0, 1, 0]]
步数:[0, 0.29, 0.35, 1]
【问题讨论】:
-
而不是使用距离使用最大轴距离。例如,以下将获得与中心的最大距离并将其标准化为值 0-1
vec2 xyDist = abs(vTextureCoord - vec2(0.5,0.5)); float dist = max(xyDist.x, xyDist.y)/0.5;然后您可以使用dist进行插值。 -
你能给我一个使用centerX,centerY的例子吗?为什么要除以 0.5?