GLSLシェーダでテクスチャ座標はどのように補間されますか?
画像を画面サイズから元のサイズの 1/4 にダウンサンプリングしようとしています。これは非常に単純な手順ですが、正しくないようです。私は、1/4 画面サイズのターゲットとして使用する単一色のアタッチメントを備えた FBO を持っています。
テクスチャをダウンサンプリングするために、描画する単純なフルサイズのクワッドがあります。座標は次のとおりです。
v[0].v.position.x = -1.f; v[0].v.position.y = -1.f; v[0].v.position.z = 0.f;
v[1].v.position.x = -1.f; v[1].v.position.y = 1.f; v[1].v.position.z = 0.f;
v[2].v.position.x = 1.f; v[2].v.position.y = -1.f; v[2].v.position.z = 0.f;
v[3].v.position.x = 1.f; v[3].v.position.y = 1.f; v[3].v.position.z = 0.f;
ここで、頂点シェーダーは、次のように、テクスチャ座標を生成するために入力座標をスケーリングおよびバイアスするだけで、頂点を変換する必要はなく、ジオメトリと共にテクスチャ座標を渡す必要もなく、頂点を通過します。
#version 420
layout(location = 0) in vec3 attrib_Position;
out vec2 attrib_Fragment_Texture;
void main()
{
attrib_Fragment_Texture = attrib_Position.xy * 0.5 + 0.5;
gl_Position = vec4(attrib_Position.xy, 0.0, 1.0);
}
したがって、*attrib_Fragment_Texture* として出力されるテクスチャ座標は、頂点座標が -1 から 1 になると 0.0 から 1.0 になります。しかし、次のシェーダーでこれを少しテストすると、uv.x と uv.y だけが動くことが示されているようです。 0.0 から 0.25 まで。私はそれらが 0.0 から 1.0 に補間されることを期待していました!
#version 420
in vec2 attrib_Fragment_Texture;
out vec4 Out_Colour;
void main(void)
{
vec2 uv = attrib_Fragment_Texture.xy;
Out_Colour = vec4(uv.x, uv.y, 1.0, 1.0);
}
私の明らかに単純な間違い/誤解が何であるかを誰かが見つけることができますか?