Я вызываю «GetCharABCWidthsFloatW», чтобы получить информацию о ширине символа.С этим я получу левый подшипник, правый боковой подшипник и расширенную ширину.
Для позиционирования каждого символа я начну с переменных «xPlacement», которые начнутся с нуля.Сначала я отрегулирую переменную xPlacement, вычтя «левый боковой подшипник».После того, как персонаж нарисован, я добавлю его на ширину символа (я покажу расчет для этого позже).Затем я переместу переменную xPlacement, добавив информацию о «правой стороне подшипника» из текущего «xPlacement».
Это, на мой взгляд, все, что должно быть кодом для размещения символов, верно?
Важно исправить ширину символов.Ширина будет рассчитываться с использованием параметра advancedWidth, а также ПОЛОЖИТЕЛЬНОЙ версии подшипника с левой стороны и ПОЛОЖИТЕЛЬНОЙ версии подшипника с правой стороны.Я преобразую эти значения в положительные, если они отрицательные, чтобы у меня была общая ширина символа.
Вот некоторый псевдокод о том, как он генерируется.
float xPlacement = 0.0f;
for(int i = 0; i < strlen(text); ++i)
{
char charValue = text[i];
GetCharWidthABC(.., .., charInfo);
float posLeft = charInfo.leftSideBearing;
if(charInfo.leftSideBearing < 0)
posLeft = -charInfo.leftSideBearing;
float posRight = charInfo.rightSideBearing;
if(posRight < 0)
posRight = -charInfo.rightSideBearing;
float posWidth = posRight + posRight + charInfo.advancedWidth;
float letterWidth = posWidth;
xPlacement -= charInfo.leftSideBearing;
/* generated some vertex coordinates, using the xPlacement variable and letterWidth */
xPlacement += letterWidth;
xPlacement += charInfo.rightSideBearing
}
кажется, это правильный способ сделать это?