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

在Three.JS中是否可以使用clearDepth(0)?,three.js,Three.js,为了估计网格的厚度,我为正面和背面深度数据设置了两个渲染目标。将深度缓冲区中的值转换为线性深度,然后从前面减去后面得到厚度 为了获得正确的深度纹理,应设置以下内容: 渲染“前深度”纹理时: 网格.material.side=3.正面, mesh.material.depthFunc=3.LessEqualDepth; 净空深度1; // ... 远离飞机 // ... 在代码中看到了这一点,但不知道如何设置它 渲染后向深度纹理时: 网眼.材料.侧面=三个.背面, mesh.material.de

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

为了获得正确的深度纹理,应设置以下内容:

渲染“前深度”纹理时:

网格.material.side=3.正面, mesh.material.depthFunc=3.LessEqualDepth; 净空深度1; // ... 远离飞机 // ... 在代码中看到了这一点,但不知道如何设置它

渲染后向深度纹理时:

网眼.材料.侧面=三个.背面, mesh.material.depthFunc=3.GreaterEqualDepth; 净空深度0; // ... 离飞机很近 // ... 永远不要在代码中看到这个

这在three.js中不受支持吗

动画代码如下所示:

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);
}
这里有一个正在工作的JSFIDLE:


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

是的,您可以设置gl使用的深度。clearDepth值如下:

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


three.js r.78

是renderer.state.buffers.depth.setClear值;你想要什么?根据你的建议,我修改了代码如下。它不起作用!!然后,我使用gl=renderer.context;并直接使用GL命令。它工作正常。有什么区别?sph.material.side=3.FrontSide;sph.material.depthFunc=3.LessEqualDepth;renderer.state.buffers.depth.setClear1;renderer.render scenert,cameraRTT,frontDepthTex,true;sph.material.side=3.BackSide;sph.material.depthFunc=3.GreaterEqualDepth;renderer.state.buffers.depth.setClear0;renderer.render sceneRTT、cameraRTT、backDepthTex、true;这把小提琴有这两个版本…欢迎来到stackoverflow。请记住点击复选标记接受答案。非常感谢。
renderer.state.buffers.depth.setClear( value );