ビットマップフォントレンダラを作成しようとしていますが、実際の文字のプレースメントのレンダリングに問題があります。ビットマップフォントのレンダリングとカーニング
GetCharABCWidthsFloatとGetTextMetricsWを使用してフォント文字情報を取得しますが、ABC幅を正しく使用する方法がわかりません。これを行うにはさらに情報が必要ですか?
私はFreeTypeや他のライブラリを使ってこの操作をしたくないのですが、私はC++ \ Windowsで利用できる標準の機能でこれをしようとしています。
カーニング情報がないと、文字が正しく表示されません。たとえば、「f」と「t」が隣り合わせに置かれている場合、「Times new roman」を見てください。正しい文字間隔がなければ、それらはあまりにも離れて見えるでしょう。 アルゴリズムの例は---ここ
float letterBottomLeftX = 0.0f;
float letterHeight = 1.0f;
float letterWidth = 1.0f;
float scale = 1.0f;
for(U32 c = 0; c < numberOfCharacters; ++c)
{
fon->GetCharcterInfo(charValue, charInfo);
//float advancedWith = (charInfo.A * scale) + (charInfo.B * scale) + (charInfo.C * scale);
letterWidth = charInfo.B * scale;
letterHeight = textMetrics.Height * scale;
if(c == 0)
{
letterBottomLeftX = -(charInfo.A * scale);
}
// vertex placement, beginning at letterBottomLeftX
// texture placement
// index placement
letterBottomLeftX += (charInfo.A + charInfo.B + charInfo.C) * scale;
}
は、それがどのように見えるか、あなたは文字間の悪い間隔を気づくことができるの例です。 (テクスチャUVを無視して、文字の配置が正しいとしたらそれを修正します)。
http://img88.imageshack.us/img88/4015/njpjp2.png
誰にもアイデアはありませんか? – jack
誰かがビットマップフォントレンダラーを書いていますか? – jack