Donc j'essaye d'implémenter le rendu de police avec des champs de distance signés dans mon moteur graphique. Pour cela, j'utilise la bibliothèque FreeType pour générer des glyphes de toutes les lettres. Plus précisément, je suis en train de charger des bitmaps monochromes comme ceci:FreeType produisant des glyphes asymétriques
FT_Load_Char(face, c, FT_LOAD_RENDER | FT_LOAD_TARGET_MONO)
Et puis-je extraire tous les bits de la mémoire tampon de glyphe et le mettre dans une texture noir blanc monochrome que je peux afficher sur l'écran à des fins de test.
Mon code pour extraire les bits et le mettre dans un tableau d'octets:
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;
}
}
Mon problème cependant est que le produit Glyphes FreeType semblent être asymétriques.
Par exemple ceci est la lettre M avec une pixelsize de police de 64 en utilisant les OpenSans-Regular police:
Et voici la lettre M avec la même police avec une pixelsize de 1024:
Je l'ai essayé avec plusieurs polices, tailles de polices multiples, etc. et certains glyphes toujours rester asymétrique. Notez également que je lis les données de pixels des textures manuellement pour vérifier que la mise à l'échelle de texture d'OpenGL ou quoi que ce soit ne provoque pas l'erreur.
Des idées sur la raison pour laquelle FreeType semble produire des glyphes asymétriques ou quelqu'un pourrait-il me dire si cela pourrait même être un problème lors du rendu ultérieur du texte? Editer: J'extrais maintenant les bits en utilisant les fonctions de la bibliothèque, donc l'erreur doit être quelque part dans FreeType.
C'est exactement ce que je suis sur le point de commencer à suivre un didacticiel learnopengl. – Zebrafish
Ouais, il utilise FreeType mais il n'utilise pas les champs de distance signés. –
"* Ouais, il utilise FreeType mais il n'utilise pas les champs de distance signés. *" FreeType ne génère pas "les champs de distance signés.Il ne fait que pixelliser les glyphes.Il n'est pas clair pour moi quel est votre problème avec l'asymétrie ici –