为了估计网格的厚度,我为正面和背面深度数据设置了两个renderTargets。将深度缓冲区中的值转换为线性深度,然后从前面减去厚度以获得厚度。
为了获得正确的深度纹理,应该设置:
渲染前深度纹理时:
mesh.material.side = THREE.FrontSide, mesh.material.depthFunc = THREE.LessEqualDepth; clearDepth(1); // ......远离飞机 // ...在代码中看到了这个,但不知道如何设置它
:
mesh.material.side = THREE.BackSide, mesh.material.depthFunc = THREE.GreaterEqualDepth; clearDepth(0); // ......清楚到NEAR飞机 // ...在代码中永远不会看到这个!!
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的设置。但对于一般的凹模型,我认为应该改变它们。
答案 0 :(得分:1)
是的,您可以设置gl.clearDepth( value )
使用的深度,如下所示:
renderer.state.buffers.depth.setClear( value );
当深度缓冲区被清除时,这将设置写入深度缓冲区的值。
three.js r.78