私のレンダリングは、これらの2つの垂直な四角形のエッジに沿って出血するピクセル(赤い点)です。オルソレンダリングしていないとき、どのようにオフセットを半分テクセルしますか?
私が使用しています:
GL_NEAREST
最小/最大テクスチャフィルタリングを。texture
フラグメントシェーダで機能します。- 所望スプライト@(X = 320、Y = 732、幅= 8、高さ= 8)
s1 = 320.0f/1024.0f; s2 = (320.0f+8.0f)/1024.0f; t1 = 732.0f/1024.0f; t2 = (732.0f+8.0f)/1024.0f;
と1024×1024のスプライトアトラスは、暗い質感#1(レンダーそれが簡単に)出血を見ることができるようにするには:
がレンダリング#2:(明るいテクセルをカウントするためのテクスチャが、赤色画素がまだ存在している)を持つ:
私はOpenGLのtexture
関数がピクセル中心でサンプリングされることを理解していますが、 "S、T"座標をハーフピクセルでオフセットしようとすると、それは修正されますが、悪影響があります。
たとえば、以下のテクスチャ座標は、スプライトの境界に沿ったテクセルの幅を縮小します。
s1 = (0.5f+320.0f)/1024.0f; s2 = (0.5f+320.0f+8.0f)/1024.0f; t1 = (-0.5f+732.0f)/1024.0f; t2 = (-0.5f+732.0f+8.0f)/1024.0f;
I Tが組み合わせオフセット可能S &の束を試みた(両方ともに0.5を加算し、S & T、Tに加えることなく、Sから減算、両方から差し引く)と異なる値、それのどれも働かなかった。私は何が欠けているのか分からない。私は出血するピクセルの色がテクスチャ(背景ではない)から来ているので、これはT接合の問題ではないと思います。
興味深い。だから私が[0,1]にクランプしたり、オルトレンダリングを使用していない限り、私はフラグメントシェーダーの座標をクランプする必要がありますか? –
はい。それ以前に行うと、クランプとエッジを再構成するのではなく、テクスチャを引き伸ばすことになります。何かが起こる唯一の場所は、[320,320.5]と[327.5,328]の間の領域です。テクスチャ上のどこにいても特別なことはしないでください。投影(オルトまたはパースペクティブ)はまったく違いはありません。オルトレンダリングでさえ、フラグメントシェーダでそれを行う必要があります。 – BDL