0

OpenGLで新しいステッカーを作っています。キャラクターは、テクスチャ付きのクワッドを使用して描画されます。テクスチャは、FreeType2 でレンダリングされたビットマップから作成されます。

スクロールはdx、経過時間と指定された速度に基づいて a を計算し、「世界 x: 」を更新することによって行われますx += dx。経過時間に影響を与えることはできないので、dxなどの浮動小数点値を取る必要があります0.5

整数への丸めは実際には機能しません。どのように行っても、非常に目立つジッターが発生します。反復ごとに「ワールド x」の値を丸め、「ワールド x」でフロートのままにしますが、の代わりにglTranslate2fを使用して、 に与えられた値を丸めてみました。いずれにせよ、小さいピクセル サイズでは常に許容できないジッターが発生するため、丸めはオプションではありません。GL_NEARESTGL_LINEAR

つまり、浮動小数点値でレンダリングし、アンチエイリアシングを使用する必要があります (たとえばGL_LINEAR)。abs(x - (int)x)問題は、小さなピクセル サイズでは、文字が に近い0.5か近いかに応じて、文字が拡大または縮小するように見えること0.0です。この拡大と縮小は、一種の「エッジのちらつき」として認識できます。

この認識された成長と縮小をなくすにはどうすればよいでしょうか? シェーダーに飛び込んで、独自のアンチエイリアシング アルゴリズムを実装する必要があるのでしょうか? 他のアイデアはありますか?

4

2 に答える 2

2

ある種のサブピクセル レンダリングを実装する必要があります。X 方向にスクロールしているので、ターゲット幅の 4 倍の X 次元でレンダリングすることをお勧めします (オーバーサンプリング)。次に、フラグメント シェーダーでピクセル カバレッジの統合を実行します。つまり、スクリーン ピクセルをカバーするすべてのテクセルを合計し、オーバーサンプリング係数で正規化 (除算) します。出力フレームバッファ形式によっては、後でガンマ補正を適用する必要がある場合があります。

于 2013-08-31T17:17:49.470 に答える