2013-01-01 41 views
5

は私がイメージから始めましょう: - ゴシック、太字、サイズ11醜いフォント、OpenGLの

enter image description here

上の画像は、2つの異なる方法で達成したテキストを提示し、両方のは、フォントの同じタイプを使用しました

画像編集プログラムで作成されたものと、OpenGLアプリケーションの一番上に作成されたものがあります。 FTGLライブラリからFTExtrudeFontを使用して、より正確には:

font_ptr font(new FTExtrudeFont(filename.c_str())); 

私の質問は、なぜそれがこのように描かれていますか?私はこれが異なるリサイズアルゴリズムかもしれないと考えていますが、もしそうなら、私のOpenGLアプリケーションでこのような見栄えの良いフォント(下のもの)をどうやって達成できますか?

EDIT:

font->Render(text,   // Text to be displayed 
      -1,   // Line length, which by default is left as -1 
      pos);   // Position in which to draw text 
+0

押し出しフォントが必要ですか?通常のベクトルフォントやテクスチャフォントを試して、より良い結果が得られるかどうかを確認できますか? – WildCrustacean

+0

@bde私はテクスチャフォントを試しましたが、これはアンチエイリアス処理されています。 –

答えて

3

これはOpenGLでテクスチャサンプリングに起因する何かのようになります。

フォントをレンダリングするために、私はこの1つの関数を呼び出すだけです。これは、描画しているテクスチャ(この場合はフォント)が描画するクワッドと同じサイズではない場合に発生します。

簡単な解決策:テクスチャサイズが画面上に描画された領域と一致することを確認してください。 14pxフォントを12px領域にレンダリングしないでください。ただし、12pxフォントまたは14px領域を使用してください。

あなたの質問では、あなたのフォントは「サイズ11」であると言います。私はFTGLライブラリの詳細を認識していませんが、私はあなたが描くことができる特定の文字列のための最良の寸法を教えてくれると思います。これらの計算に独自の数式を使用しないでください。ライブラリを使用してください。あなたが正しい次元を持っている限り、あなたが持っている問題は起こるべきではありません。

+0

答えをありがとう、しかし私はレンダリングのために呼び出す唯一の関数(それはFTGLライブラリからです)です: font-> Render(text、-1、pos); 私はレンダリング領域を変更する方法がないと思います。 –

+0

私が言ったように、私はFTGLライブラリについてはあまりよく分かりませんが、誤ったモデルビュー/投影行列を使って、頂点からピクセル位置への変換を間違ってしまう可能性がありますか? *何かがテクスチャをサンプリングさせています。 –

+0

あなたが言うように、私が「間違ったモデルビューマトリックス」を使用しているかどうかを実際にどのようにチェックすることはできません。私が見ているものから、他のものは正しいようです - 私はGUIコンポーネントの背景を描画するために他のテクスチャを使用していて、正しく表示されています(ピクセルは適切な場所にあります)。 –

関連する問題