Так что я пытаюсь реализовать рендеринг шрифтов с полями с полями ввода в моем графическом движке.FreeType, производящий асимметричные глифы
Для этого я использую библиотеку FreeType для создания Glyphs всех букв. В частности, я пытаюсь загрузить монохромные растровые изображения, как это:
FT_Load_Char(face, c, FT_LOAD_RENDER | FT_LOAD_TARGET_MONO)
А затем извлечь все биты из буфера глифов и поместить его в монохромной черно белые текстуры, которые можно отобразить на экране для целей тестирования.
Мой код для извлечения битов и положить его в массив байтов:
FT_Bitmap bm = face->glyph->bitmap;
FT_Bitmap mono;
FT_Bitmap_New(&mono);
//convert from 8 pixel per byte to 1 pixel per byte
FT_Bitmap_Convert(ft, &bm, &mono, 1);
//set each byte from 0/1 to 0/255
for (int y = 0; y < mono.rows; y++) {
for (int x = 0; x < mono.width; x++) {
mono.buffer[y * mono.width + x] *= 255;
}
}
Моя проблема, однако, в том, что глифы FreeType производит кажутся асимметричным.
Например, это буква M с шрифтом pixelsize 64 с помощью OpenSans-Regular шрифта:
И это буква М с тем же шрифтом с pixelsize 1024:
Я попытался это с несколькими шрифтами, различных размеров шрифтов и т.д., и некоторые глифы всегда оставаться асимметричным. Также обратите внимание, что я вручную считываю данные пикселов текстур, чтобы проверить, что масштабирование текстуры OpenGL или что-то еще не вызывает ошибку.
Любые идеи относительно того, почему FreeType, похоже, создает асимметричные глифы, или кто-нибудь может сказать мне, будет ли это даже проблемой при последующем рендеринге текста?
Редактирование: теперь я извлекаю биты, используя библиотечные функции, поэтому ошибка должна быть где-то в FreeType.
Это именно то, что я собираюсь начать с учебника learnopengl. – Zebrafish
Да, он также использует FreeType, но он не использует поля с записями. –
«* Да, он также использует FreeType, но он не использует поля с полями со знаком. *« FreeType не генерирует »поля с полями со знаком. Он просто растеризует глифы. Мне непонятно, какова ваша проблема с асимметрией здесь. –