0

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;
}
4

1 に答える 1

0

texelFetch (...)エイリアシングが顕著な問題であり、mip マッピングを含むフィルタリングを無効にすることは驚くべきことではありません。この関数を使用する場合は、自分で実装する必要があります。

の典型的な使用例texelFetch (...)は、テクスチャ フィルタリングを無効にする (ここで必要なものではありません) か、マルチサンプル テクスチャから特定のサンプルをフェッチすることです (これも必要なものではありません)。texture (...)テクスチャのアンチエイリアシングが必要な場合は、正規化されたテクスチャ座標と通常のテクスチャを使用することをお勧めします。

于 2013-11-07T14:01:21.950 に答える