1

サブピクセルレンダリングを使用するOpenGLに基づくUIシステムの高速テキストレンダリングを作成しています.黒い背景上の白いテキストは「通常の」ブレンディングでうまく機能しますが、白い背景上の黒いテキストはそうではありません.サブピクセルレンダリングのカラーフリンジのためです.が 0 倍され ( が黒であるため)、サブピクセル エイリアシングが失われます。

これが「正しい」方法ではないことはわかっていますが(R、G、Bの各サブピクセルチャネルを個別にブレンドする必要があるため)、非常に高速で、ほとんどすべての状況で見栄えがします。

これを行うには、ブレンドが行われる「前に」テクスチャの色を反転する必要があります。次に例を示します。

通常のブレンドは次のとおりです。SourceColor * SourceAlpha + DestColor * (1 - SourceAlpha)

これ欲しい:((1,1,1) - SourceColor) * SourceAlpha + DestColor * (1 - SourceAlpha)

シェーダーなしでこれを行う方法はありますか?? 重要なのは、異なるブレンド設定で2つのパスを実行することだと思いますが、うまくいきません

通常のテクスチャと反転したテクスチャの 2 つを使用できることはわかっていますが、ビデオ メモリを無駄にしたくありません (各フォントには既に大きなテクスチャが必要なため)。

4

1 に答える 1

0

フォント テクスチャにアルファ チャネルを指定し、それを使用してフォントの形状を指定します。テクスチャ内のすべてのピクセルの色を白に保ちます。外側のピクセルも含めます (アルファ = 0 になるため、rgba = 1110 になります)。次にglColor3f(r,g,b)、テクスチャを適切に(黒でも)色付けし、使用glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);すると適切にブレンドされます。

于 2014-08-21T01:55:41.513 に答える