gpt4 book ai didi

c++ - 缩放 TrueType 字体导致文本模糊?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:02 32 4
gpt4 key购买 nike

我正在使用 FreeType 呈现文本。有人告诉我 TrueType 依赖于数学,因此当像位图字体一样缩放时不应该变得模糊。然而,这正是发生在我身上的事情。

我所做的是首先在 FreeType 中初始化一个“面”,然后将生成的字形位图存储在纹理中。然后我将该纹理缩放 4 并渲染它 - 它看起来很模糊!

所以这是我所做的(大约):

FT_Face face;
if(FT_New_Face(ft, "fonts/arial.ttf", 0, &face))
std::cout << "Failed to load font\n";

然后生成纹理

unsigned int texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, face->glyph->bitmap.width,
face->glyph->bitmap.rows, 0, GL_RED, GL_UNSIGNED_BYTE, face->glyph->bitmap.buffer);

然后通过在更大的四边形上拉伸(stretch)纹理来缩放...

那么为什么我的 TrueType 字体在像位图字体一样缩放时会变得模糊?

最佳答案

位图字体在缩放时变得模糊,因为它们是位图。模糊来自这样一个事实,即从它们的自然分辨率放大它们需要在位图没有的地方发明新的像素信息。 “新信息”是模糊的部分。

纹理是位图(或多或少)。因此,当您将 True-Type 字体转换为纹理时,它变成了位图。纹理无法回到创建它们的源头来制造新信息。根据您给他们的分辨率,他们拥有您将数据上传到他们时所拥有的信息。

因此,无论纹理如何获取其数据,它在缩放时的行为都将像位图一样:通过变得模糊。

如果您打算利用 TrueType 的多分辨率特性,那么您需要以您希望绘制它们的分辨率生成字形。或者你可以雇用 signed-distance font rasterization .

关于c++ - 缩放 TrueType 字体导致文本模糊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50545163/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com