我们有一个渲染到WebGLRenderTarget
的场景,其深度纹理被传递给ShaderMaterial
在不同场景中的tDepth
。以下是ShaderMaterial
的片段着色器。它进行深度检查,然后渲染到画布上。 (我可以禁用autoclear的深度并让它工作,但我想要一个自定义深度函数,因此代码)。
varying vec2 vUv;
uniform sampler2D tDepth;
uniform float width;
uniform float height;
void main() {
vec2 clipCoord = vec2(gl_FragCoord.x / width , gl_FragCoord.y / height)
float oldDepth = texture2D(tDepth, clipCoord).r; // Gets wrong value.
float currentDepth = gl_FragCoord.z;
if (oldDepth > currentDepth) {
gl_FragColor = vec4(1,0,0,0);
} else {
discard;
}
}
如何获得oldDepth
的正确值?