WebGL 在三角形内插值参考颜色
WebGL interpolate with a reference color inside a triangle
使用 regl,我试图用 WebGL 绘制一个三角形,我可以在三角形内的某个参考点定义颜色,并让其他像素的颜色成为它们到该点的距离的函数。
到目前为止,它只在这个参考点是其中一个角点时有效:
从角开始的渐变
这是使用以下 Vert 和 Frag 着色器完成的:
vert: `
precision mediump float;
uniform float scale;
attribute vec2 position;
attribute vec3 color;
varying vec3 fcolor;
void main () {
fcolor = color;
gl_Position = vec4(scale * position, 0, 1);
}
`,
frag: `
precision mediump float;
varying vec3 fcolor;
void main () {
gl_FragColor = vec4(sqrt(fcolor), 1);
}
`,
attributes: {
position: [
[1, 0],
[0, 1],
[-1, -1]
],
color: [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
},
uniforms: {
scale: regl.prop('scale')
}
这里的参考点是[1,0]、[0,1]和[-1,-1]。对于同一个三角形,如何将另一个参考点放在 [0,0] 处,例如颜色为白色? (这将在三角形内给出 "island" 白色)
你必须定义2个uniform变量,一个是参考点的坐标,一个是参考点的颜色:
uniforms: {
scale: regl.prop('scale'),
refPoint: [0, 0],
refColor: [1, 1, 1]
}
通过varying
变量将顶点坐标从顶点着色器传递到片段着色器:
precision mediump float;
uniform float scale;
attribute vec2 position;
attribute vec3 color;
varying vec2 fpos;
varying vec3 fcolor;
void main()
{
fpos = position;
fcolor = color;
gl_Position = vec4(scale * position, 0, 1);
}
通过distance
计算从参考点到片段着色器中插值位置的距离:
float dist = distance(refPoint, fpos);
根据距离插入颜色,mix
:
vec3 micColor = mix(refColor, fcolor, dist);
片段着色器:
precision mediump float;
uniform vec2 refPoint;
uniform vec3 refColor;
varying vec2 fpos;
varying vec3 fcolor;
void main()
{
float dist = distance(refPoint, fpos);
vec3 micColor = mix(refColor, fcolor, dist);
gl_FragColor = vec4(sqrt(micColor), 1);
}
使用 regl,我试图用 WebGL 绘制一个三角形,我可以在三角形内的某个参考点定义颜色,并让其他像素的颜色成为它们到该点的距离的函数。
到目前为止,它只在这个参考点是其中一个角点时有效:
从角开始的渐变
这是使用以下 Vert 和 Frag 着色器完成的:
vert: `
precision mediump float;
uniform float scale;
attribute vec2 position;
attribute vec3 color;
varying vec3 fcolor;
void main () {
fcolor = color;
gl_Position = vec4(scale * position, 0, 1);
}
`,
frag: `
precision mediump float;
varying vec3 fcolor;
void main () {
gl_FragColor = vec4(sqrt(fcolor), 1);
}
`,
attributes: {
position: [
[1, 0],
[0, 1],
[-1, -1]
],
color: [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
},
uniforms: {
scale: regl.prop('scale')
}
这里的参考点是[1,0]、[0,1]和[-1,-1]。对于同一个三角形,如何将另一个参考点放在 [0,0] 处,例如颜色为白色? (这将在三角形内给出 "island" 白色)
你必须定义2个uniform变量,一个是参考点的坐标,一个是参考点的颜色:
uniforms: {
scale: regl.prop('scale'),
refPoint: [0, 0],
refColor: [1, 1, 1]
}
通过varying
变量将顶点坐标从顶点着色器传递到片段着色器:
precision mediump float;
uniform float scale;
attribute vec2 position;
attribute vec3 color;
varying vec2 fpos;
varying vec3 fcolor;
void main()
{
fpos = position;
fcolor = color;
gl_Position = vec4(scale * position, 0, 1);
}
通过distance
计算从参考点到片段着色器中插值位置的距离:
float dist = distance(refPoint, fpos);
根据距离插入颜色,mix
:
vec3 micColor = mix(refColor, fcolor, dist);
片段着色器:
precision mediump float;
uniform vec2 refPoint;
uniform vec3 refColor;
varying vec2 fpos;
varying vec3 fcolor;
void main()
{
float dist = distance(refPoint, fpos);
vec3 micColor = mix(refColor, fcolor, dist);
gl_FragColor = vec4(sqrt(micColor), 1);
}