2012-02-29 10 views
2

FreeTypeを使用してOpenGLでテキストを描画し、よりシャープにするために、ミップマップごとにFreeTypeからフォントテクスチャを生成します。 1つのことを除いてすべてがかなりうまく動作します。私はこれを行うとき:OpenGLで最も近い大きなミップマップを作る方法は?

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

をOpenGLは、テキストの大きさに応じて、最も近いミップマップを選択しますが、使用可能なサイズは、16と32であり、私は22をしたい場合は、それはそれは恐ろしい見えるように、16を選びます。代わりに、常に最も近い大きなミップマップを選択するように設定する方法はありますか?

私は手動でミップマップレベルを設定するテキストをレンダリングしながら、私はこれを行うことができます知っている:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (int) log2(1/scale)); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (int) log2(1/scale)); 

しかし、それは有効なのでしょうか?そのようなミップマップを完全に使用する必要がなくなりますか?私はちょうど異なるテクスチャを作り、サイズに応じて1つを選ぶことができます。それでは、これを成し遂げるための良い方法がありますか?

+0

"FreeTypeを使用してOpenGLでテキストを描画し、よりシャープにするために、私は各ミップマップ反復ごとにFreeTypeからフォントテクスチャを生成します。"これは良い考えではありません。 FreeTypeが小さなテキストをレンダリングする方法は、ミップマップ補間にはうまくいかない方法ではありません。だからあなたのGL_LINEAR_MIPMAP_LINEARのテキストはひどく見えます。 FreeTypeの小さなテキストヒントは、小さなテキストを間違って見せてしまった。あなたが作業し、使用するだけのテキスト解決策があればよいでしょう。 –

答えて

2

GL_LINEAR_MIPMAP_LINEARGL_TEXTURE_MIN_FILTERパラメータとして試したことがありますか? 2つの最も近いミップマップをブレンドする必要があります。それは外観を改善するかもしれない。

また、あなたはここに文書化されてtexture_lod_bias拡張子を使用して試みることができる: http://www.opengl.org/registry/specs/EXT/texture_lod_bias.txt

+0

はい、私はGL_LINEAR_MIPMAP_LINEARで始まりましたが、それはさらに悪いことでした(文字のサイズが違っていたため、「ゴースト」があったようです)。 – Detheroc

+0

OpenGLビットマップフォントユーティリティを書きましたが、固定サイズの出力に固執しました。 16x24。私は毎回一貫してスケーリングされた正投影(基本的に幅/高さがビューポートサイズに等しい)でテキストを描画していたため、かなりうまく機能しました。しかし、あなたが任意のサイズを必要とする場合、texture_lod_biasは価値があります。 – andrewmu

2

あなたは常に選択することによって、例えば(これを実現するために役立つ可能性がある、ミップマップレベルに定数を追加するためにGL_TEXTURE_LOD_BIASを使用することができます次のより高いミップマップレベル)。しかし、単純にミップマップに近いものがこの状況には理想的でないことがあります。スクリーンスペースにテクスチャを常に表示していて、フォントサイズが画面上のピクセルにどのように対応しているかを正確に把握している場合は、ミップマッピングがあまりにも多くの機械の可能性があります。

関連する問題