2D テクスチャをルックアップ テーブルとして使用して、より大きなテクスチャにインデックスを付けようとしています。次に、カラー値をクワッドにテクスチャ マップします。私が抱えている問題は、サンプリングすると、大きなテクスチャがネイティブ解像度よりも小さく見えることです。たとえば、4k x 4k の大きなテクスチャがあります。ルックアップ テクスチャは、大きなテクスチャの 1k x 1k 領域をサンプリングします。次に、結果を、幅 1k x 高さ 1k のビューポートを満たすクワッドにテクスチャ マップします。テクスチャ化されたクワッドと元の 4k x 4k テクスチャの 1k x 1k 部分の間に 1:1 マップが表示されることを期待しています。ただし、テクスチャ化されたクワッドは非常にエイリアシングされています。4k x 4k テクスチャが 1k x 1k テクスチャに縮小されたように見え、ルックアップ マップはそのテクスチャの 512 x 512 部分をサンプリングします。
つまり、ネイティブの 4k x 4k テクスチャではなく、1k x 1k ビューポートに合わせてサイズ変更されたテクスチャからサンプリングしているように見えます。私がこの問題に取り組んでいる理由に問題はありますか?
ここに私の頂点シェーダーがあります:
uniform mat4 pvm;
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
and fragment shader:
uniform sampler2D image; //The large texture
uniform sampler2D map; //The lookup texture
void main()
{
vec4 pos = texture(map,(gl_TexCoord[0].st * vec2(-1.0, 1.0))); //Flip the origin
vec4 color = texelFetch(image,ivec2(pos.s*4096,pos.t*4096),0);
gl_FragColor = color;
}