Javascript Three.js后处理运动模糊渲染黑屏
我犯了一个错误。问题是:渲染的是黑屏而不是旋转立方体 我在三个.js之上使用 核心后处理代码如下所示:Javascript Three.js后处理运动模糊渲染黑屏,javascript,three.js,3d,Javascript,Three.js,3d,我犯了一个错误。问题是:渲染的是黑屏而不是旋转立方体 我在三个.js之上使用 核心后处理代码如下所示: const composer = new POSTPROCESSING.EffectComposer(renderer) const renderPass = new POSTPROCESSING.RenderPass(scene, camera) renderPass.renderToScreen = false composer.addPass(renderPass) const ren
const composer = new POSTPROCESSING.EffectComposer(renderer)
const renderPass = new POSTPROCESSING.RenderPass(scene, camera)
renderPass.renderToScreen = false
composer.addPass(renderPass)
const renderTargetParameters = { format: THREE.RGBAFormat, stencilBuffer: true }
const renderTarget2 = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight, renderTargetParameters)
const effectSaveTarget = new POSTPROCESSING.SavePass(renderTarget2)
effectSaveTarget.clear = false
// motion blur
const effectBlend = new POSTPROCESSING.ShaderPass(THREE.BlendShader, 'tDiffuse1')
effectBlend.material.uniforms[ 'tDiffuse2' ].value = effectSaveTarget.renderTarget
effectBlend.material.uniforms[ 'mixRatio' ].value = 0.0
effectBlend.material.needsUpdate = true
effectSaveTarget.renderToScreen = false
effectBlend.renderToScreen = true
console.log(effectBlend)
composer.addPass(effectBlend)
composer.addPass(effectSaveTarget)
然后在主渲染循环中,我将composer.render(delta)放置在three.js对话论坛中,它为我提供了一个使用vanilla three.js的解决方案: 我认为我的错误是在需要ShaderMaterial时为ShaderPass提供了一个shader对象
// post processing starts here
composer = new THREE.EffectComposer( renderer );
// render pass
var renderPass = new THREE.RenderPass( scene, camera )
// save pass
var renderTargetParameters = {
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
stencilBuffer: false
};
var savePass = new THREE.SavePass( new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, renderTargetParameters ) );
// blend pass
var blendPass = new THREE.ShaderPass( THREE.BlendShader, 'tDiffuse1' );
blendPass.uniforms[ 'tDiffuse2' ].value = savePass.renderTarget.texture;
blendPass.uniforms[ 'mixRatio' ].value = 0.65;
// output pass
var outputPass = new THREE.ShaderPass( THREE.CopyShader );
outputPass.renderToScreen = true;
// setup pass chain
composer.addPass( renderPass );
composer.addPass( blendPass );
composer.addPass( savePass );
composer.addPass( outputPass );
从那以后,我做了一个比这里显示的简单2帧混合更好的运动模糊着色器: