2013-04-23 33 views
2

在後處理中,我在FXAAShader之後添加了CopyShader,即使FXAA被解禁(例如:webgl_postprocessing2.html),也能正確呈現。three.js:如何在FXAAShader(r58)後添加CopyShader

~ 

renderer.setSize(320, 240); // not full screen 

~ 

fxaa = new THREE.ShaderPass(THREE.FXAAShader); 
fxaa.uniforms[ 'resolution' ].value = new THREE.Vector2(1/320, 1/240); 
composer.addPass(fxaa); 

var effect = new THREE.ShaderPass(THREE.CopyShader); 
effect.renderToScreen = true; 
composer.addPass(effect); 

此代碼無法正常工作,並且渲染的圖像比預期的要小。

我使用r58並通過Firefox20進行了確認。我該怎麼辦?

+1

稱 「代碼無法正常工作」 是不是很描述。什麼是問題,你的問題是什麼?你能提供一個生動的例子嗎? – WestLangley 2013-04-23 14:17:30

+0

without postprocessing:http://jsfiddle.net/uxeez/3/,FXAA only:http://jsfiddle.net/uxeez/1/,FXAA - >複製:http://jsfiddle.net/uxeez/2/ – user2256140 2013-04-23 15:43:02

回答

3

THREE.EffectComposer.renderTargetwidthheight必須與WebGLRenderer相匹配。

爲此,您可以創建自己的renderTarget並將其傳遞給構造函數EffectComposer

var parameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, 
        format: THREE.RGBFormat, stencilBuffer: false }; 
var renderTarget = new THREE.WebGLRenderTarget(width, height, parameters); 

composer = new THREE.EffectComposer(renderer, renderTarget); 

小提琴:http://jsfiddle.net/uxeez/4/

three.js所r.58

+0

非常感謝! – user2256140 2013-04-23 16:12:54

+0

我很抱歉沒有認真檢查這些例子(比如webgl_postprocessing_advanced.html)。 – user2256140 2013-04-26 14:20:04