【问题标题】:three.js - mask transparency with a texture imagethree.js - 用纹理图像遮罩透明度
【发布时间】:2020-06-29 22:24:59
【问题描述】:

我想在我的场景中添加蒙版效果。 我发现了这个很酷的 jsfiddle:https://jsfiddle.net/f2Lommf5/4703/

我一直想知道是否可以将该纹理的白色部分设置为透明,这样我就可以根据上面的平面纹理裁剪我的背景对象。

我尝试使用 alphaTest 值但徒劳无功。

有没有人知道如何达到这个结果?谢谢

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    我不能 100% 确定我理解您的预期结果,但应该可以通过后期处理来实现效果。在下面的现场演示中,MaskPass 用于创建一个遮罩,其中没有渲染实际美容通道的像素。重要的代码部分是:

    var clearPass = new ClearPass();
    
    var maskPass = new MaskPass( sceneMask, camera );
    maskPass.inverse = true;
    
    var renderPass = new RenderPass( scene, camera );
    renderPass.clear = false;
    
    var clearMaskPass = new ClearMaskPass();
    var outputPass = new ShaderPass( CopyShader );
    
    var parameters = {
            minFilter: THREE.LinearFilter,
            magFilter: THREE.LinearFilter,
            format: THREE.RGBFormat,
            stencilBuffer: true
        };
    
    var renderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, parameters );
    
    composer = new EffectComposer( renderer, renderTarget );
    composer.addPass( clearPass );
    composer.addPass( maskPass );
    composer.addPass( renderPass );
    composer.addPass( clearMaskPass );
    composer.addPass( outputPass );
    

    请注意,遮罩对象(平面)在单独的场景中进行管理。

    现场演示:https://jsfiddle.net/e6p0axb1/5/

    【讨论】:

    • 感谢您的回答。我希望在没有任何后处理方法的情况下找到一种方法,但它实际上在你的 jsfiddle 上效果很好,我要试试
    • 不幸的是,我的渲染器的 {alpha: true} 属性似乎不适用于 composer 方法:jsfiddle.net/x3mkuLh9 有没有办法在使用 composer 时保持画布的透明度?谢谢
    • 是的,渲染目标必须是RGBA 格式:jsfiddle.net/40gef6sz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多