Tôi đang sử dụng THREE.js với trình đổ bóng. Tôi đang cố gắng để có được thông tin zbuffer.gl_FragCoord.x, y, z là 1 cho tất cả các pixel và w là độ sâu
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);
}
Có đối tượng với vị trí khác nhau trong hiện trường, do đó các giá trị trong zbuffer nên khác nhau.
Đó là lạ mà gl_FragCoord.x
, gl_FragCoord.y
và gl_FragCoord.z
có vẻ là 1.0
cho tất cả các mảnh vỡ, trong khi gl_FragCoord.w
dường như thay đổi đối với các mảnh khác nhau.
Nếu tôi sử dụng 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);
}
Nó có vẻ là hình ảnh zbuffer:
Vậy tại sao sẽ gl_FragCoord.w
được đại diện thông tin chiều sâu trong khi gl_FragCoord.z
luôn là 1.0
cho tất cả các mảnh vỡ?
Làm cách nào để có được chiều rộng và chiều cao màn hình trong trình đổ bóng? – Ovilia
@Ovilia: Cũng giống như cách bạn thực hiện bất kỳ giá trị nào khác: với đồng phục. –
Nhưng tại sao 'gl_FragCoord.w' lại khác nhau đối với các đoạn khác nhau? – Ovilia