Używam THREE.js z modułem cieniującym. Próbuję uzyskać informacje zbuffera.gl_FragCoord.x, y, z jest 1 dla wszystkich pikseli, a w jest głębokością
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);
}
Są to obiekty o różnej pozycji na scenie, a tym samym wartości w zbuffer powinna różnić.
To dziwne, że gl_FragCoord.x
, gl_FragCoord.y
i gl_FragCoord.z
wydaje się być 1.0
dla wszystkich fragmentów, podczas gl_FragCoord.w
wydaje się różnić dla różnych fragmentów.
Jeśli używam 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);
}
Wydaje się, że obraz zbuffer:
Więc dlaczego gl_FragCoord.w
reprezentować szczegółowych informacji podczas gl_FragCoord.z
jest zawsze 1.0
dla wszystkich fragmentów?
Jak uzyskać szerokość i wysokość ekranu w module cieniującym? – Ovilia
@Ovilia: W ten sam sposób, w jaki robisz jakąkolwiek inną wartość: z uniformami. –
Ale dlaczego "gl_FragCoord.w" jest różne dla różnych fragmentów? – Ovilia