Ich benutze THREE.js mit Shader. Ich versuche die zbuffer Informationen zu bekommen.gl_FragCoord.x, y, z ist 1 für alle Pixel und w ist die Tiefe
Vertex-Shader:
// switch on high precision floats
#ifdef GL_ES
precision highp float;
#endif
void main()
{
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
Fragment-Shader:
#ifdef GL_ES
precision highp float;
#endif
void main()
{
gl_FragColor = vec4(gl_FragCoord.x, gl_FragCoord.y, gl_FragCoord.z, 1.0);
}
Es gibt Objekte mit unterschiedlicher Position in der Szene, so dass die Werte in Z-Buffer sollten variieren.
Es ist seltsam, dass gl_FragCoord.x
, gl_FragCoord.y
und gl_FragCoord.z
1.0
für alle Fragmente zu sein scheint, während gl_FragCoord.w
für verschiedene Fragmente zu variieren scheint.
Wenn ich gl_FragCoord.w
verwenden:
#ifdef GL_ES
precision highp float;
#endif
void main()
{
float zbuffer = gl_FragCoord.w * 500.0;
gl_FragColor = vec4(zbuffer, zbuffer, zbuffer, 1.0);
}
Es scheint, die Z-Buffer Bild zu sein:
So würde warum gl_FragCoord.w
vertreten Tiefeninformation während gl_FragCoord.z
immer 1.0
für alle Fragmente ist?
Wie bekomme ich Bildschirmbreite und -höhe im Shader? – Ovilia
@Ovilia: So wie du jeden anderen Wert hast: mit Uniformen. –
Aber warum variiert 'gl_FragCoord.w' für verschiedene Fragmente? – Ovilia