我无法让我的RenderPass写入到MaskPass中。如果我尝试单独进行传递(比如只执行TexturePass;或TexturePass + OutputPass),它可以工作,但是我无法让我的模具缓冲区工作。
我只想将主要的“场景”渲染2或3次到不同的模板(然后组合起来),但是如果我也使用一个MaskPass,我甚至都无法让一个RenderPass工作。蒙版+纹理传递似乎有效,是RenderPass引起了我的问题。
基本上,如果我做了MaskPass,那么RenderPass什么都不会显示。它应该给我看一架蒙面飞机。
// Composer
var texture1 = new THREE.TextureLoader().load( 'textures/2294472375_24a3b8ef46_o.jpg' );
var texturePass1 = new THREE.TexturePass( texture1 );
var clearMask = new THREE.ClearMaskPass();
var renderMask = new THREE.MaskPass( this.scene, this.camera );
var renderMaskInverse = new THREE.MaskPass( this.scene, this.camera );
renderMaskInverse.inverse = true;
var viewScene = new THREE.RenderPass( this.scene, this.camera );
// Composition pass
var outputPass = new THREE.ShaderPass( THREE.CopyShader );
outputPass.renderToScreen = true;
var renderTargetParameters = {
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
format: THREE.RGBFormat,
stencilBuffer: true
};
// Setup render target
var renderTarget = new THREE.WebGLRenderTarget( SCREEN_WIDTH, SCREEN_HEIGHT, renderTargetParameters );
this.composer = new THREE.EffectComposer(this.renderer, renderTarget);
var renderPass = new THREE.RenderPass(this.scene, this.camera);
//renderPass.renderToScreen = true;
this.composer.addPass( texturePass1 );
//this.composer.addPass( viewMask );
this.composer.addPass( renderMask );
this.composer.addPass( viewScene );
this.composer.addPass( clearMask );
this.composer.addPass( outputPass );
发布于 2017-12-14 13:22:11
我已经为这个问题找了一天左右的解决方案,并遇到了很多像你这样的问题。没有一个有用的答案,但我想我找到了一个解决办法:
要启用RenderPass的掩蔽功能,需要设置clear = false。就你而言:
var viewScene = new THREE.RenderPass( this.scene, this.camera );
viewscene.clear = false
这样就行了!这里有一个代码库:https://codepen.io/staus/pen/BJNNLq
https://stackoverflow.com/questions/35003506
复制相似问题