是否可以缩放字形而不使它们移出线?

时间:2019-04-22 02:39:55

标签: c++ sdl-2 sdl-ttf

我最近一直在尝试在游戏中使用字形来实现文本渲染。我已经能够将它们渲染到屏幕上,但是我希望能够缩放它们而不将其移出正在渲染的当前行。

例如,它应如下所示:

Expected

不是这样的:

Output

换句话说,我希望所有字形都沿着相同的原点排列。我尝试使用字形量度提出自己的算法,以尝试准确放置字形,然后将它们乘以比例。我尝试过的所有方法都不适合每个角色或每个比例。

1 个答案:

答案 0 :(得分:1)

感谢@Scheff向我指出正确的方向。通过使用与他们给我的帖子有关的帖子,我能够开发出两个单独的公式-一个用于对齐字形的顶部,另一个用于对齐字形的底部。我想我会把它们张贴在这里,以帮助其他人解决这个问题。这是两个函数:

将字形沿其顶部对齐:

TTF_Font font;
float scaleOfText;
int maxY;
int positionInput, realPositionValue; /*positionInput is where the program is told that the glyphs 
should be rendered on the y-axis and realPositionValue is the position on the y-axis where the
glyphs will be rendered once they are aligned*/
char glyph;
TTF_GlyphMetrics(font, glyph, nullptr, nullptr, nullptr, &maxY, nullptr);
    //Formula itself:
    realPositionValue = positionInput - (TTF_FontAscent(font) * scale - (maxY * scale));

如下所示:https://imgur.com/a/wtjcuSE

将字形沿其底部对齐:

TTF_Font font;
float scaleOfText;
int maxY;
int positionInput, realPositionValue; /*positionInput is where the program is told that the glyphs 
should be rendered on the y-axis and realPositionValue is the position on the y-axis where the
glyphs will be rendered once they are aligned*/
char glyph;
TTF_GlyphMetrics(font, glyph, nullptr, nullptr, nullptr, &maxY, nullptr);
    //Formula itself:
    realPositionValue = (positionInput + maxY * scale) - ((TTF_FontAscent(font) + maxY) * scale);

如下所示:https://imgur.com/a/v8RXaii

我还没有使用混合在一起的不同字体进行测试,但是我认为它应该也能正常工作。我希望这对遇到与我面临的问题类似的人有帮助。再次感谢大家的帮助!