【问题标题】:threejs same renderer show in multiple canvasesthreejs 相同的渲染器在多个画布中显示
【发布时间】:2016-12-24 07:24:05
【问题描述】:

Threejs 渲染器能否在多个画布中渲染相同的场景,所以我想渲染一次并在两个画布中显示。请注意,我不想渲染它两次,我只需要将一个画布反射到另一个画布上。谢谢。

【问题讨论】:

    标签: canvas three.js renderer


    【解决方案1】:

    这很简单,不再涉及three.js,而是简单地将一个画布输出复制到另一个画布。

    https://jsfiddle.net/VsWb9/5357/

        // copy source canvas to the other canvas after each render iteration
        pipctx.drawImage(renderer.domElement, 0, 0, 200, 200);
    

    更新

    这是一个性能更好的解决方案(适用于 Chrome 和 Firefox,但尚未适用于 Edge):

    1. 从 Three 的画布元素中捕获流

      dataUrl = URL.createObjectURL(renderer.domElement.captureStream(45));
      
    2. 将该流附加到 <video> 的 src 属性

      pip = document.createElement('video');
      pip.style.width = pip.style.height = '200px';
      document.body.appendChild(pip);
      pip.src = dataUrl;
      pip.play();
      

    这样您就不必在每帧渲染后刷新镜像元素。它们将自动与从源画布捕获的流保持同步。对于 captureStream 不可用的浏览器,此解决方案需要回退到上述版本。展示 100 个视频元素的示例,反映了 Three 主画布中的内容:

    https://jsfiddle.net/VsWb9/5359/

    【讨论】:

    • 谢谢 Pawel,你能说我吗,它会改变 fps 速率吗?
    • @Gor 这取决于副本数量及其分辨率。两份不会有太大影响,但100份会有。另请参阅我的更新。它展示了如何拥有多个画布副本,而无需手动刷新它们。
    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多