【问题标题】:three.js EffectComposer browser window resize issue三.js EffectComposer 浏览器窗口调整大小问题
【发布时间】:2014-05-04 18:34:41
【问题描述】:

我有一个渲染设置,在调整浏览器窗口大小时出现调整大小问题。

我渲染了两个场景,其中一个用于应用了后处理效果的对象。对于效果,我使用示例目录中的 THREE.EffectComposer 和着色器。

然后借助另一个着色器示例将两个场景渲染相加混合。


请参阅以下简化设置:http://jsbin.com/hibum/18/edit?js,output (在 HTML 部分我包含了一些来自three.js 存储库的js 源代码)

如果您缩小输出面板,然后重新加载页面并再次加宽面板,您将看到如下内容:

主场景(蓝色球体)确实更新了其渲染大小,但效果场景(橙色球体)仍然具有相同的分辨率,只是放大了。

我找不到需要在浏览器调整大小事件中更新哪个渲染目标或渲染器(或着色器统一?)以在调整大小后仍然正确输出图像。

对于主要作曲家,它使用setSize() 调用,但如果我在效果作曲家上这样做,它不会渲染效果场景。

感谢任何帮助,谢谢。

【问题讨论】:

  • 看看在three.js例子中EffectComposer.reset()是如何使用的。
  • @WestLangley,如果我在我的 jsbin 示例中将 reset() 添加到 setSize() 函数(在浏览器调整大小时调用的函数)内的主要或效果 EffectComposer 中,效果场景不是不再渲染,只有主场景... /edit: 只有main.reset(); 在这个函数中渲染两个场景,但对调整大小问题没有影响
  • 好的,所以你必须弄清楚为什么它在 three.js 示例中可以正常工作,而不是你的代码。
  • @WestLangley 对,谢谢。重置两个作曲家后,我没有“重新附加”渲染目标。

标签: javascript three.js rendering


【解决方案1】:

我必须重置两个 EffectComposers,然后还重置 AdditiveBlendShader 的 tDiffuse2 制服:

main.reset();  
effects.reset();  

blend.uniforms.tDiffuse2.value = effects.renderTarget2;

http://jsbin.com/hibum/23/edit?js,output

【讨论】:

  • 有人能解释一下 tDiffuse 制服与分辨率的关系吗?除了一组不同的着色器外,我也有同样的问题,我发现其他一些有这个问题的变体:(stackoverflow.com/questions/30626567/…stackoverflow.com/questions/13350084/…)。似乎问题必须与 EffectComposer 重置/调整大小和/或着色器制服有关。问题有答案,但答案并不能解释它们为什么起作用,因此很难用它来回答新问题。
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2012-05-23
  • 1970-01-01
  • 2013-09-02
相关资源
最近更新 更多