シェイダーで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);
}
シーン内の異なる位置を有するオブジェクトは、このようにZバッファの値が変化しなければならない、があります。
それはgl_FragCoord.w
が異なるフラグメントのために変化するように思わながらgl_FragCoord.x
、gl_FragCoord.y
とgl_FragCoord.z
は、すべての断片について1.0
のようだという奇妙です。
私が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);
}
をZバッファの画像のようだ:
gl_FragCoord.z
は常にすべての断片について1.0
ありながら、なぜgl_FragCoord.w
奥行き情報を表すことでしょうか?
シェーダで画面の幅と高さを取得するにはどうすればよいですか? – Ovilia
@Ovilia:他の値と同じように:ユニフォームで。 –
しかし、なぜ 'gl_FragCoord.w'は異なるフラグメントで変化しますか? – Ovilia