2016-12-15 273 views
0

林試圖呈現相同的畫布渲染多個場景。一切都按預期工作,直到我將FXAA着色器添加到我的作曲家之一併且不呈現。three.js所FXAA着色器不工作CopyShader - 呈現空白

這作曲是我的第二個場景,從0

呈現1080pts什麼我周圍的作曲/渲染器的代碼看起來像繼承人的基本知識:

this.renderer = new THREE.WebGLRenderer({ 
    antialias: true, 
    alpha: true 
}); 
this.renderer.autoClear = false; 
this.renderer.setSize(RENDER_WIDTH * 3, RENDER_HEIGHT); 


let renderPass = new THREE.RenderPass(this.scene, this.camera); 

let effectFXAA = new THREE.ShaderPass(THREE.FXAAShader); 
effectFXAA.uniforms['resolution'].value.set(1/RENDER_WIDTH, 1/RENDER_HEIGHT); 
effectFXAA.renderToScreen = true; 

let effectCopy = new THREE.ShaderPass(THREE.CopyShader); 
effectCopy.renderToScreen = true; 

let rtParameters = { 
    minFilter: THREE.LinearFilter, 
    magFilter: THREE.LinearFilter, 
    format: THREE.RGBAFormat, 
    stencilBuffer: true 
}; 

this.composer = new THREE.EffectComposer(this.renderer, 
    new THREE.WebGLRenderTarget(RENDER_WIDTH, RENDER_HEIGHT, rtParameters)); 

this.composer.addPass(renderPass); 
this.composer.addPass(effectFXAA); 
this.composer.addPass(effectCopy); 

然後我有一些其他場景/作曲家,所有的工作很好,並有THREE.HueSaturationShader但沒有FXAA着色器。

運行期間我設置了渲染視口的位置和渲染作曲家:

this.renderer.setViewport(RENDER_WIDTH, 0, RENDER_WIDTH, RENDER_HEIGHT); 
this.composer.render(); 

this.renderer.setViewport(RENDER_WIDTH * 2, 0, RENDER_WIDTH, RENDER_HEIGHT); 
this.composer2.update(); 
... 

編輯

  • 它使得罰款,如果我刪除FXAA着色器。
  • 如果我不偏移它它使得罰款(渲染爲0,0),並刪除複製着色器,但保持FXAA着色器
  • 它只是呈現的最後一個像素(伸),如果我把它抵消,保持FXAA着色器,但刪除CopyShader。

回答

3

感謝this answer

需要設置的renderToScreen標誌爲false,因爲它的屏幕外渲染。

effectFXAA.renderToScreen = false;