regl fake-3d 静态图变动态图, 使用深度信息图片

原文链接: regl fake-3d 静态图变动态图, 使用深度信息图片

上一篇: regl 水纹波动效果

下一篇: regl 圆形色盘

https://tympanus.net/codrops/2019/02/20/how-to-create-a-fake-3d-image-effect-with-webgl/

通过额外的一张含有深度信息的图片, 实现只让水动, 当然也可以实现出上面文章的效果, 做成类似3d的样子, 不知道有没有滤波器或者和tf结合直接找到原图的深度信息, 这样可以省去使用ps抠图的步骤

up-8d12493e9a9674217cb779dec9797ebb97c.gif

up-6dcad974044d0c283623edffca250414bee.JPEGup-47fcba6dfcb157a8cfef57dacc8a3819954.JPEG

import REGL from "regl";
import { getImg } from "../../utils";
// https://tympanus.net/codrops/2019/02/20/how-to-create-a-fake-3d-image-effect-with-webgl/
export default async () => {
  const contentImg = await getImg("/img/water.jpg");
  const contentImgMap = await getImg("/img/water-maps.jpg");
  const regl = REGL();
  regl.clear({
    color: [0, 0, 0, 1],
    depth: 1,
  });
  const draw = regl({
    frag: `
    uniform sampler2D texture;
    uniform sampler2D textureMap;
    precision mediump float;
    uniform vec4 color;
    uniform float tick;
    void main () {
      float frequency=100.0;
      float amplitude=0.005;
      vec4 colorMap = texture2D(textureMap, gl_PointCoord.xy);
      float distortion= colorMap.r/2.0 *  sin(gl_PointCoord.y*frequency + tick/5.0)*amplitude;
      float dx = gl_PointCoord.y*0.2;
      float dy = gl_PointCoord.x* -0.2;
      float x = gl_PointCoord.x + distortion;
      float y = gl_PointCoord.y+ 0.0;
      vec2 uv = vec2(x,y);
      gl_FragColor = texture2D(texture, uv);
    }`,
    vert: `
    precision mediump float;
    attribute vec2 position;
    void main () {
      gl_Position = vec4(position, 0, 1);
      gl_PointSize =  500.0;
    }`,
    attributes: {
      position: [[0, 0]],
    },
    uniforms: {
      color: [1, 0, 0, 1],
      texture: regl.texture(contentImg),
      textureMap: regl.texture(contentImgMap),
      tick: regl.prop("tick"),
    },
    primitive: "points",
    count: 1,
  });
  regl.frame(({ tick }) => {
    draw({ tick });
  });
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值