【问题标题】:Dashed moving line React Three Fiber虚线移动线反应三纤维
【发布时间】:2021-06-08 12:04:49
【问题描述】:

我想知道我是否可以做类似这样的效果:https://reactflow.dev/

用虚线表示方向。

使用r3f但普通的three.js也可以

我也想要这种类型的背景,但如果我能让箭头工作也很好。

【问题讨论】:

    标签: javascript reactjs three.js webgl react-three-fiber


    【解决方案1】:

    只需将LineDashedMaterial 扩展为.onBeforeCompile,添加time 统一:

    let scene = new THREE.Scene();
    let camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 100);
    camera.position.set(0, 0, 5);
    let renderer = new THREE.WebGLRenderer();
    renderer.setSize(innerWidth, innerHeight);
    document.body.appendChild(renderer.domElement);
    
    let g = new THREE.BufferGeometry().setFromPoints([
      new THREE.Vector2(-2, 2, 0),
      new THREE.Vector2(0, -2, 0),
      new THREE.Vector2(2, 2, 0)
    ]);
    let uniforms = {
      time: {value: 0}
    }
    let m = new THREE.LineDashedMaterial({
      color: "yellow",
      dashSize: 0.5,
      gapSize: 0.25,
      onBeforeCompile: shader => {
        shader.uniforms.time = uniforms.time;
        shader.fragmentShader = `
          uniform float time;
          ${shader.fragmentShader}
        `.replace(
          `vLineDistance,`,
          `vLineDistance - time,`
        );
        //console.log(shader.fragmentShader);
      }
    });
    let l = new THREE.Line(g, m);
    l.computeLineDistances();
    scene.add(l);
    
    let clock = new THREE.Clock();
    
    renderer.setAnimationLoop( _ => {
      uniforms.time.value = clock.getElapsedTime();
      renderer.render(scene, camera);
    });
    body{
      overflow: hidden;
      margin:0;
    }
    <script src="https://cdn.jsdelivr.net/npm/three@0.126.1/build/three.min.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 2022-12-23
      • 2021-04-18
      • 2021-07-11
      • 2021-05-09
      • 2021-12-05
      • 2021-08-09
      • 2021-03-15
      相关资源
      最近更新 更多