シェーダーで THREE.js を使用しています。zbuffer 情報を取得しようとしています。
頂点シェーダー:
// 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