が、私は長さが128個のピクセルの1Dテクスチャーで、私は私のs
ない範囲[0,1]
に、しかし[0,1-1./257]
のようなものにGLSLフラグメントシェーダでtexture1D
に渡された座標をクランプする必要があることがわかりました(257->258
が与える増加アーチファクトバック; 0.99610897
に二等分して得られた数)。そうでなければ、私はs==0
で得られた値の繰り返しを持っています。テクスチャ座標範囲は、エッジテクセルの外側のエッジで終了していますか?私のデバッグから
これはもちろん、GL_REPEAT
の代わりにをGL_CLAMP_TO_EDGE
に設定すると発生しません。
テクスチャ座標範囲の端がエッジテクセルの中心ではなく、その外側のエッジにあるという結論に至りました。
それから、私は(GL_REPEAT
モードで)GL_NEAREST
にGL_TEXTURE_*_FILTER
を設定した場合、サンプリングが指定さs
の右にあるテクセルを見ているかのようGL_LINEAR
フィルタのために、それは、左右の平均をとりながら、それは、動作することを意味するだろうs==1
のテクセル。
私の結論は正しいですか?テクスチャの両端は、テクスチャの中心ではなく、テクセルの外側の端にありますか?
はい。それが本当に理にかなっている唯一の方法です。 [0、1]はテクセルの全範囲をカバーするので、s = 1は右端のテクセルの右端でなければならない。同じ質問ではありませんが、説明は私の答えと非常に似ています:http://stackoverflow.com/questions/31810822/opengl-3d-texture-shine-through。 –