Я пытаюсь создать рендеринга растрового шрифта, однако у меня возникают проблемы с отображением фактических мест размещения отдельных букв.Рисование рендеринга растровых изображений и кернинг
Я получу информацию о символах шрифта через GetCharABCWidthsFloat и GetTextMetricsW, однако я не уверен, как правильно использовать ширину ABC ... или мне нужна дополнительная информация для этого?
Я не хочу использовать FreeType или любые другие библиотеки, чтобы сделать это, я пытаюсь сделать это со стандартными функциями, доступными через C++ \ Windows.
Без информации о кернинге буквы не будут отображаться правильно. Например, взгляните на «Times new roman», когда «f» и «t» расположены рядом друг с другом. Без правильного расстояния между буквами они будут выглядеть слишком далеко друг от друга. пример алгоритма ---
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