我正在使用带着色器的 THREE.js。我正在尝试获取 zbuffer 信息。
顶点着色器:
// switch on high precision floats
#ifdef GL_ES
precision highp float;
#endif
void main()
{
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
片段着色器:
#ifdef GL_ES
precision highp float;
#endif
void main()
{
gl_FragColor = vec4(gl_FragCoord.x, gl_FragCoord.y, gl_FragCoord.z, 1.0);
}
场景中有不同位置的对象,因此 zbuffer 中的值应该不同。
奇怪的是gl_FragCoord.x
,gl_FragCoord.y
和gl_FragCoord.z
似乎1.0
适用于所有片段,而gl_FragCoord.w
对于不同的片段似乎有所不同。
如果我使用gl_FragCoord.w
:
#ifdef GL_ES
precision highp float;
#endif
void main()
{
float zbuffer = gl_FragCoord.w * 500.0;
gl_FragColor = vec4(zbuffer, zbuffer, zbuffer, 1.0);
}
它似乎是 zbuffer 图像:
那么为什么gl_FragCoord.w
要表示深度信息,而gl_FragCoord.z
总是1.0
针对所有片段呢?