THREE.js - 重叠两个场景而不清除第一个场景

时间:2016-12-19 17:40:19

标签: javascript three.js

我正在尝试渲染两个场景,但渲染周期中的第二个场景完全删除了第一个场景内容。

我的渲染器设置如下:

IntentService

我正在使用this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false, preserveDrawingBuffer: true }); this.renderer.autoClear = false; ,因为我需要将渲染器的一部分导出为PNG,并且需要它来保留其缓冲区。

创建我的第一个场景后,我创建了一个看起来像这样的作曲家:

preserveDrawingBuffer

然后我创建了我的第二个场景,它的作曲家看起来完全相同,除了它的作曲家也添加了let renderPass = new THREE.RenderPass(this.scene, this.camera); var effectCopy = new THREE.ShaderPass(THREE.CopyShader); effectCopy.renderToScreen = true; var rtParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, stencilBuffer: true }; this.composer = new THREE.EffectComposer(this.renderer, new THREE.WebGLRenderTarget(this.width, this.height, rtParameters)); this.composer.setSize(this.width, this.height); this.composer.addPass(renderPass); this.composer.addPass(effectCopy);

最后我的更新功能如下:

THREE.FXAAShader

我尝试更改场景背景,并使用渲染器update() { this.renderer.clear(); // They're actually different sizes and positions, so i move the viewport. But this snippet ive left them the same this.renderer.setViewport(0, 0, this.width, this.height); this.composer1.render(); this.renderer.setViewport(0, 0, this.width, this.height); this.composer.render(); ... } alphaautoclear进行播放,但无法使其正常工作

示例

Jsfiddle两个场景的例子,其中一个是剪辑另一个场景。

1 个答案:

答案 0 :(得分:0)

自three.js r83起,RenderPass现在具有clearDepth属性。您可以在第二个场景true上将其设置为RenderPass,这应该允许第二个场景在第一个场景之上呈现。