我在尝试在Three.js中实现的效果遇到了麻烦。我希望在游戏中获得轮廓,但我也希望它们受到深度的影响。我正在使用3个场景(一个具有主模型,一个具有蒙版,一个具有轮廓的彩色模型)。
我的面具看起来像这样:
如您所见,它由黑色,白色和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做出反应。
提前致谢!