我通过执行以下操作实现了反馈循环(后备缓冲区):
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 中不需要的对象,但有什么建议吗?
最佳答案
摘自 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);
}
关于javascript - 反馈循环 THREE.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508011/