【问题标题】:Feedback Loop THREE.js反馈循环三.js
【发布时间】:2019-08-16 02:44:08
【问题描述】:

我通过以下方式实现了一个反馈循环(后缓冲):

function render()   
{ 
    renderer.setRenderTarget(BufferA);       
    renderer.render(BufferAScene, camera);
    renderer.setRenderTarget(null); 
    renderer.clear(); let temp = BufferA; 
    BufferA = BufferAFeedBack; 
    BufferAFeedBack = temp; 
    ...
 }

虽然它有效,但它会发出警告,提示纹理目标和帧缓冲区之间存在反馈循环。我想这就是为什么在移动设备上看不到任何着色器的原因。 有没有更有效的方法来交换 THREE.js 中的 FBO? 我知道 OpenGL 并且已经实现了同样的东西,所以我想我可以在 vanilla WebGL 中实现应用程序,但我不想从头开始重新编写主机应用程序! 尽管抽象层似乎让我复制了普通 WebGL 中不需要的对象,但有什么建议吗?

【问题讨论】:

  • 也许您正在寻找像 this 这样的示例,用于 this
  • 谢谢 gman 我会告诉你它是否有效。
  • 顺便提一下在移动设备中调试着色器的技巧?我知道 Chrome 的移动模拟器,但在这种情况下,模拟器运行而移动没有。
  • 您可以将Safari远程连接到iOS,将Chrome远程连接到Android Chrome进行调试。谷歌“远程调试 safari/chrome”。也许this articlethis one
  • 谢谢!如果您的评论有效,我会通知您,以便您可以将其发布为答案

标签: javascript three.js shader pixel-shader


【解决方案1】:

根据gman 的评论,我做了一些调整,效果很好:

function render()
{

    BufferAUniforms.iChannel0.value = BufferAFeedBack.texture;
    ImageUniforms.iChannel0.value = BufferA.texture;

    renderer.setRenderTarget(BufferA);
    renderer.render(BufferAScene, camera);

    renderer.setRenderTarget(null);
    renderer.clear();

    let temp = BufferA;
    BufferA = BufferAFeedBack;
    BufferAFeedBack = temp;

    renderer.render(BufferImageScene, camera);

}

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2018-10-27
    • 2010-12-09
    • 1970-01-01
    • 2015-07-22
    • 2014-09-16
    相关资源
    最近更新 更多