首页 > 解决方案 > Freetype 无法找到所有字形索引,即使在标准 ASCII 范围内

问题描述

在用 C++ 学习 OpenGL 时,我一直在尝试让 textrendering 工作。但是,在使用 freetype 时尝试加载某些字形时,我似乎遇到了问题。

作为第一步,我尝试将 ASCII + 扩展 ASCII 范围加载到 1 个大纹理中。但是,我发现某些字形存在差距。见下图: 在此处输入图像描述

我现在所做的只是像这样迭代 ASCII 范围:

for (int c = 32; c < 256; c++)
{
    int glyph_index = FT_Get_Char_Index(face, c);
    DEBUGINFO("Looked for char index for {}. Got index = {}", (char)c, glyph_index);
    if (FT_Load_Glyph(face, glyph_index , FT_LOAD_RENDER))
    {
        DEBUGERROR("Could not load glyph! {}", letter);
    }
}

我也尝试过直接使用 FT_Load_Char 但这也不起作用。对于某些 ASCII 值,索引始终为 0。我正在使用 windows 使用的默认 Arial 字体,字体中存在字形。如果我手动查找空白矩形的索引并将其用作 FT_Load_Glyph 的索引,那么它们显示得很好。所以由于某种原因 FT_Get_Char_Index 无法在字体中找到这些字形。我做的另一个测试是尝试通过 unicode 值查找字符,但结果是一样的。因此 FT_Get_Char_Index(face, '\u007E') 为我生成了一个有效的波浪字符索引,但应该对应于“Ç”的 FT_Get_Char_Index(face, '\u00C7') 返回 0 作为索引,即使它在字体中也是如此。

如果有人知道我做错了什么,我将不胜感激!谢谢。

标签: c++unicodeasciifreetype

解决方案


推荐阅读