我在 Three.js 中遇到了屏蔽问题。
我想在对象周围勾勒出轮廓,我使用本教程做到了
http://www.codeproject.com/Articles/8499/Generating-Outlines-in-OpenGL
我写了这段代码;
renderer.autoClear = false;
...
renderer.render(scene, camera);
...
var gl = this.world.renderer.domElement.getContext('webgl') || this.world.renderer.domElement.getContext('experimental-webgl');
gl.clearStencil(0);
gl.clear(gl.STENCIL_BUFFER_BIT);
gl.enable(gl.STENCIL_TEST);
gl.stencilFunc(gl.ALWAYS, 1, 1);
gl.stencilOp(gl.KEEP, gl.REPLACE, gl.REPLACE);
gl.colorMask(0, 0, 0, 0);
renderer.render(sceneMask, camera);
gl.colorMask(1, 1, 1, 1);
gl.stencilFunc(gl.NOTEQUAL, 1, 1);
gl.stencilOp(gl.KEEP, gl.REPLACE, gl.REPLACE);
renderer.render(sceneOutlines, camera);
gl.disable(gl.STENCIL_TEST);
它就像一个魅力。
但我想让轮廓更厚。在 Windows、Web 浏览器上使用角度和 DirectX,因此我可以渲染更粗的线条。
(我知道我可以通过顶点法线使用缩放对象,但这样我会在某些地方创建更厚的轮廓,而在其他地方创建更薄的轮廓)
然后我有了想法,模糊轮廓。
我找到了这个教程
(这不是 http 链接)://stemkoski.blogspot.com/2013/03/using-shaders-and-selective-glow.html
我在渲染场景之前添加了 MaskPass,对象会被模糊。那时发生了什么?没有什么。
我为掩码和渲染通道反转掩码并禁用缓冲区清除,但总的来说我不知道我在做什么。
这是带有我制作的一些示例的 jsFiddle。
它看起来像轮廓工作,但我使用附加着色器和绿色立方体(应该作为轮廓工作)被添加到红色立方体(应该接收轮廓)。是否可以以红色立方体具有绿色模糊轮廓的方式使用 Three.js 遮罩?或者也许有其他方法可以使用非 Three.js 方法获得相同的效果?
PS这是生死攸关的问题,所以不是开玩笑。