glfx 透镜

原文链接: glfx 透镜

上一篇: glfx 旋涡

下一篇: glfx 彩色网格

强度-1,1 可以表示为凹透镜或者凸透镜

up-17c80ffd7fd687428bad947eb0eb8d520da.png

const vert = `
precision highp float;
attribute vec2 vertex;
attribute vec2 uv;
varying vec2 texCoord;
void main() {
  texCoord=uv;
  gl_Position = vec4(vertex, 0.0, 1.0);
}
`;

const frag = `
precision highp float;
uniform float radius;
uniform float strength;
uniform vec2 center;
uniform sampler2D texture;
uniform vec2 texSize;
varying vec2 texCoord;
void main() {
  vec2 coord = texCoord * texSize;
  coord -= center;
  float distance = length(coord);
  if (distance < radius) {
    float percent = distance / radius;
    if (strength > 0.0) {
      coord *= mix(1.0, smoothstep(0.0, radius / distance, percent),
                   strength * 0.75);
    } else {
      coord *= mix(1.0, pow(percent, 1.0 + strength * 0.75) * radius / distance,
                   1.0 - percent);
    }
  }
  coord += center;
  gl_FragColor = texture2D(texture, coord / texSize);
  vec2 clampedCoord = clamp(coord, vec2(0.0), texSize);
  if (coord !=
      clampedCoord) { /* fade to transparent if we are outside the image */
    gl_FragColor.a *= max(0.0, 1.0 - length(coord - clampedCoord));
  }
}
`;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值