3

我在 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。

http://jsfiddle.net/9MtGR/15/

它看起来像轮廓工作,但我使用附加着色器和绿色立方体(应该作为轮廓工作)被添加到红色立方体(应该接收轮廓)。是否可以以红色立方体具有绿色模糊轮廓的方式使用 Three.js 遮罩?或者也许有其他方法可以使用非 Three.js 方法获得相同的效果?

PS这是生死攸关的问题,所以不是开玩笑。

4

1 回答 1

1

当我在制作一些需要我加入类似星球大战的激光的动画时——这最终起到了帮助作用:http: //bkcore.com/blog/3d/webgl-three-js-animated-selective-glow。 html

尤其是这个例子:http ://demo.bkcore.com/threejs/webgl_tron_iso.html

于 2013-08-24T04:53:07.147 回答