Sto usando THREE.js con shader. Sto cercando di ottenere le informazioni su zbuffer.gl_FragCoord.x, y, z è 1 per tutti i pixel e w è la profondità
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);
}
Ci sono oggetti con posizione diversa nella scena, ossia i valori nella Zbuffer dovrebbero variare.
È strano che gl_FragCoord.x
, gl_FragCoord.y
e gl_FragCoord.z
sembra essere 1.0
per tutti i frammenti, mentre gl_FragCoord.w
sembra variare per i diversi frammenti.
Se uso 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);
}
Sembra essere l'immagine Zbuffer:
Quindi, perché gl_FragCoord.w
rappresenterà informazioni di profondità, mentre gl_FragCoord.z
è sempre 1.0
per tutti i frammenti?
Come è possibile ottenere la larghezza e l'altezza dello schermo nello shader? – Ovilia
@Ovilia: nello stesso modo in cui fai qualsiasi altro valore: con le uniformi. –
Ma perché 'gl_FragCoord.w' sta variando per diversi frammenti? – Ovilia