3

我可以在 Three.js 中使用 stencilFunc 和 stencilOp 函数吗?我试图实现模板测试的代码,但没有奏效。

var scene = new THREE.Scene();
var renderer = new THREE.WebGLRenderer({
    antialias: true,
    stencil: true
});

function render() {
    var context = renderer.context;

    context.enable(context.STENCIL_TEST);
    context.stencilFunc(context.ALWAYS, 0, 0xffffffff);
    context.stencilOp(context.REPLACE, context.REPLACE, context.REPLACE);
    context.clearStencil(0);
    context.clear(context.COLOR_BUFFER_BIT, context.DEPTH_BUFFER_BIT, context.STENCIL_BUFFER_BIT);

    renderer.render(scene, camera);
    context.stencilFunc(context.EQUAL, 1, 0xffffffff);
    context.stencilOp(context.KEEP, context.KEEP, context.KEEP);

    context.disable(context.STENCIL_TEST);
    context.flush();
}
4

1 回答 1

0

当您创建 WebGL 渲染器时,默认情况下它将为 true,根据 threeJS 文档

http://threejs.org/docs/#Reference/Renderers/WebGLRenderer

您可以直接从渲染对象调用 clearStencil(),因为它是渲染器的行为,不知道为什么要从上下文中调用它,另外

您在代码中调用的某些函数在 ThreeJs webGL 渲染器类中不存在。

下面是类源代码的链接。请检查

https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js

于 2015-01-09T10:41:13.017 回答