是否可以缩放字形而不让它们越线?
Is it possible to scale glyphs without having them move out of line?
我最近一直在尝试在我的游戏中使用字形实现文本渲染。我已经能够将它们渲染到屏幕上,但我希望能够在不让它们移出正在渲染的当前行的情况下缩放它们。
例如它应该是这样的:
不是这个:
换句话说,我希望所有的字形沿着一个共同的原点排列。我已经尝试使用 Glyph Metrics 提出我自己的算法来尝试准确放置字形,然后我将它们乘以比例。我尝试过的任何东西都不适用于每个角色或每个音阶。
感谢@Scheff 为我指明了正确的方向。使用我发现与他们给我的那个相关的 post,我能够开发两个单独的公式 - 一个用于对齐字形的顶部,一个用于对齐字形的底部。我想我会 post 他们来这里是为了帮助其他正在努力解决这个问题的人。这是两个函数:
沿其顶部对齐字形:
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
我还没有将不同的字体混合在一起进行测试,但我认为它应该也能正常工作。我希望这可以帮助任何遇到与我面临的问题类似的问题的人。再次感谢大家的帮助!
我最近一直在尝试在我的游戏中使用字形实现文本渲染。我已经能够将它们渲染到屏幕上,但我希望能够在不让它们移出正在渲染的当前行的情况下缩放它们。
例如它应该是这样的:
不是这个:
换句话说,我希望所有的字形沿着一个共同的原点排列。我已经尝试使用 Glyph Metrics 提出我自己的算法来尝试准确放置字形,然后我将它们乘以比例。我尝试过的任何东西都不适用于每个角色或每个音阶。
感谢@Scheff 为我指明了正确的方向。使用我发现与他们给我的那个相关的 post,我能够开发两个单独的公式 - 一个用于对齐字形的顶部,一个用于对齐字形的底部。我想我会 post 他们来这里是为了帮助其他正在努力解决这个问题的人。这是两个函数:
沿其顶部对齐字形:
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
我还没有将不同的字体混合在一起进行测试,但我认为它应该也能正常工作。我希望这可以帮助任何遇到与我面临的问题类似的问题的人。再次感谢大家的帮助!