Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js后处理运动模糊渲染黑屏_Javascript_Three.js_3d - Fatal编程技术网

Javascript Three.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

我犯了一个错误。问题是:渲染的是黑屏而不是旋转立方体

我在三个.js之上使用

核心后处理代码如下所示:

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帧混合更好的运动模糊着色器: