我正在尝试渲染两个场景,但渲染周期中的第二个场景完全删除了第一个场景内容。
我的渲染器设置如下:
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();
...
}
,alpha
和autoclear
进行播放,但无法使其正常工作
示例
Jsfiddle两个场景的例子,其中一个是剪辑另一个场景。
答案 0 :(得分:0)
自three.js r83起,RenderPass
现在具有clearDepth
属性。您可以在第二个场景true
上将其设置为RenderPass
,这应该允许第二个场景在第一个场景之上呈现。