在Three.JS中是否可以使用clearDepth(0)?

时间:2016-06-17 11:13:05

标签: three.js

为了估计网格的厚度,我为正面和背面深度数据设置了两个renderTargets。将深度缓冲区中的值转换为线性深度,然后从前面减去厚度以获得厚度。

为了获得正确的深度纹理,应该设置:

  1. 渲染前深度纹理时:

    mesh.material.side = THREE.FrontSide, mesh.material.depthFunc = THREE.LessEqualDepth; clearDepth(1); // ......远离飞机 // ...在代码中看到了这个,但不知道如何设置它

  2. 渲染深度纹理时
  3. mesh.material.side = THREE.BackSide, mesh.material.depthFunc = THREE.GreaterEqualDepth; clearDepth(0); // ......清楚到NEAR飞机 // ...在代码中永远不会看到这个!!

  4. three.js不支持吗?

    代码(animate)看起来像这样:

    function animate() {
    
        controls.update();
        requestAnimationFrame(animate);
        renderer.setClearColor (0xffff00);
        sphere.material.side = THREE.FrontSide;
        // sphere.material.depthFunc = THREE.LessEqualDepth;
        renderer.render (sceneRTT, cameraRTT, frontDepthTex, true);
        sphere.material.side = THREE.BackSide;
        //  sphere.material.depthFunc = THREE.GreaterEqualDepth;
        renderer.render (sceneRTT, cameraRTT, backDepthTex, true);
    
        renderer.render (scene, camera);
    }
    

    a"工作" jsfiddle在这里:http://jsfiddle.net/jmcjc5u/n3yLfk8L/14/

    测试模型是凸椭球。因此,我不需要更改depthFunc和clearDepth的设置。但对于一般的凹模型,我认为应该改变它们。

1 个答案:

答案 0 :(得分:1)

是的,您可以设置gl.clearDepth( value )使用的深度,如下所示:

renderer.state.buffers.depth.setClear( value );

当深度缓冲区被清除时,这将设置写入深度缓冲区的值。

three.js r.78