6
我使用THREE.js着色器。我正在嘗試獲取zbuffer信息。gl_FragCoord.x,y,z對於所有像素是1,而w是深度
頂點着色器:
// 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
所有片段?
如何在着色器中獲取屏幕寬度和高度? – Ovilia 2013-03-01 05:38:48
@Ovilia:和其他任何價值一樣:穿制服。 – 2013-03-01 05:56:38
但爲什麼'gl_FragCoord.w'因不同的片段而異? – Ovilia 2013-03-01 13:54:07