【问题标题】:Reset depth buffers destroyed by EffectComposer重置被 EffectComposer 破坏的深度缓冲区
【发布时间】:2013-01-08 11:00:45
【问题描述】:

我正在尝试渲染两个不同的场景和摄像机,就像 HUD 一样。两者都在单独时正确渲染。这也可以按预期工作,因此您可以在帮助场景下看到主场景:

renderer.render(mainscene, maincamera);
renderer.render(helpscene, helpcamera);

我在使用EffectComposer渲染主场景时,根本看不到helpscene,只看到composer渲染的结果:

renderTargetParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, stencilBuffer: false };
renderTarget = new THREE.WebGLRenderTarget( width, height, renderTargetParameters );
composer = new THREE.EffectComposer(renderer, renderTarget);
---- cut out for brevity ---

composer.render(delta);
renderer.render(helpscene, helpcamera); // has no effect whatsoever on the screen, why?

这里发生了什么?同样,如果我评论任何一个渲染调用,它们都可以正常工作。但两者都启用了,我只看到作曲家场景/渲染。我希望帮助场景覆盖(或至少覆盖)在此之前呈现的任何内容。

我在renderer.render(helpscene, helpcamera); 之前有相当复杂的代码,它可能需要各种不同的渲染路径并根据不同的设置使用或不使用效果器。但我希望帮助场景始终采用没有效果或任何东西的简单路线,这就是为什么我使用单独的渲染调用而不是将其合并为效果合成器通道的原因。

编辑:原来是因为一些有趣的事情与深度缓冲区(?)。如果我将 material.depthTest = false 设置为辅助场景中的所有内容,它将正确显示。看起来深度被某些作曲家通道或作曲家本身设置为零或非常低,而且出乎意料的是,它会产生隐藏任何通过后续渲染调用渲染的内容的效果。

因为我现在只在辅助场景中使用 LineMaterial,但我预计在使用 depthTest = false 解决方法后会出现一些问题(稍后可能会有一些真实的阴影对象,这需要深度测试对同一辅助场景中的其他对象)。

所以我猜真正的问题是:如何在 EffectComposer 之后重置深度缓冲区(或其他东西),以便进一步的渲染调用不受它的影响?我也可以将辅助场景渲染作为最后一个作曲家通道,没有太大区别。

我应该提一下,我的一个作曲家设置主要 RenderPass 将纹理渲染到为此目的创建的透视相机附近的扭曲平面几何体(如在许多后处理示例中发现的正交相机和四边形设置,但有失真) .其他设置有一个带有实际场景相机的“正常”RenderPass,我希望深度信息能够让我无论如何都应该看到辅助场景(这可能是一些严重的 ****ed说英语,对不起,这里不是母语人士,我想不出更好的词)。我对这两种选择都有同样的问题。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    ...并回答我自己。找到真正的原因后,就很简单了。

    renderer.clear(false, true, false); 将清除深度缓冲区,以便覆盖渲染按预期工作:)

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2014-04-12
      • 2012-04-12
      • 2018-05-27
      相关资源
      最近更新 更多