Three.js / WebGL:使用黑白场景作为蒙版来制作轮廓

时间:2017-05-02 05:18:23

标签: three.js webgl outline

我在尝试在Three.js中实现的效果遇到了麻烦。我希望在游戏中获得轮廓,但我也希望它们受到深度的影响。我正在使用3个场景(一个具有主模型,一个具有蒙版,一个具有轮廓的彩色模型)。

我的面具看起来像这样:

enter image description here

如您所见,它由黑色,白色和alpha组成。

现在,我想要的是掩码中的每个alpha和black实例都可以剪切我的图像,而每个白色实例都会显示出来。

不幸的是,使用我当前的模板脚本,只会删除alpha:

var gl = this.renderer.domElement.getContext('webgl') || this.renderer.domElement.getContext('experimental-webgl');

        // Make the entire stencil solid first.
        gl.clearStencil(1);
        gl.clear(gl.STENCIL_BUFFER_BIT);

        // Whenever the value of a pixel is 1 in the mask, make that pixel = 0 in the stencil.
        // 0xFF is the identifier I think.
        gl.stencilFunc(gl.ALWAYS, 0, 0xFF);
        gl.stencilOp(gl.REPLACE, gl.GL_REPLACE, gl.GL_REPLACE);

        // Disable color (u can also disable here the depth buffers)
        gl.colorMask(false, false, false, false);

        // Write to stencil
        gl.enable(gl.STENCIL_TEST);

        gl.stencilMask(0xFF);

        // Mask (Create a stencil that we render the next pass into)
        this.renderer.render(this.sceneMask, this.camera);

        // Wherever the stencil is = 1, show the model.
        gl.stencilFunc(gl.EQUAL, 1, 0xFF);
        gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);

        // Enable color
        gl.colorMask(true, true, true, true);

        // Clear depth buffer (seems important)
        this.renderer.clearDepth();
        this.renderer.render(this.sceneOutline, this.camera);

        // Disable stencil test;
        gl.disable(gl.STENCIL_TEST);

我需要做什么才能同时切断?我不太了解我使用的模板脚本的所有内容,但它似乎只对alpha / non alpha做出反应。

提前致谢!

0 个答案:

没有答案