Bibliothèque Ttf2mesh - convertir les polices TrueType en grille

Beaucoup de gens connaissent le problème des graphiques en trois dimensions - le manque de solutions multiplateformes légères dans le problème de la sortie de texte.


La plupart des implémentations vous permettent d'utiliser la police sélectionnée comme texture. La bibliothèque ttf2mesh publiée implémente une autre façon: elle convertit les caractères vectoriels de police TrueType en objets maillés. Cela vous permet d'afficher du texte sous la forme d'un ensemble de triangles.


image


Cette approche présente à la fois des avantages et des inconvénients importants. La complexité de la tâche décrite ci-dessous et la contemplation des magnifiques formes de conception de polices ont apporté beaucoup de plaisir au développement. J'espère que vous l'apprécierez aussi.


Immersion dans le problème


Sur le site Web stackoverflow, vous pouvez rencontrer la question "Comment dessiner du texte en utilisant uniquement des méthodes OpenGL?" . Une réponse détaillée commence par la phrase "Pourquoi c'est dur". Je vais donner une brève traduction de cette réponse, car il vaut mieux - il est à peine possible de décrire le problème.


Les polices courantes (telles que TrueType ou OpenType) ont un format vectoriel pour représenter les caractères: leur contour est défini par un ensemble de courbes de Bézier.


image


— OpenGL, (, , ).


, CPU, — OpenGL- . , . :


image


, . , web- (CSS-sprites).


FOSDEM 2014, , :


  1. : . GPU . : ; O(N log N).
  2. . : , . Resolution independent cubic bezier drawing on GPU (Blinn/Loop)
  3. OpenVG. : API , (. OpenGL, OpenVG. Draw text OpenVG implementation)

, 3d- 2016 . .. "Distance fields" ( , . ). .


FreeType


FreeType . FTGL, API, "Distance fields" .
— libgdx.



github.com/nothings/stb/blob/master/stb_truetype.h
www.angelcode.com/products/bmfont


, . (DDS, PNG) . — .


FOSDEM 2014 .



: — ? 6000 ( Ubuntu ):


image


2.5 (Times New Roman , 15000 ).


, , ( )? ( , , , GPU ), .


O(N log N)
, , . , ( ) — . log(N) . , . , , .. " " , O(N2), O(N). , O(N).


, . , :


  • (, 3d-)

: ; .


. "" "", .


ttf2mesh


" ". ttf2mesh — (ttf2mesh.h ttf2mesh.c) C99. , :


ttf_list_fonts ttf_list_system_fontsttf_free_list
ttf_load_from_file ttf_load_from_memttf_free
ttf_glyph2meshttf_free_mesh

API. , ttf2mesh.h doxygen-. ttf_export_to_obj, Wavefront .obj. , . examples - ttf2obj.


:


  1. TTF- ,
  2. ( )

  3. 5.1.
    5.2. ( )
    5.3.
    5.4.

TTF-


Microsoft (OpenType specification). OpenType- (.otf) — TrueType- (.ttf), , . , , TTF, , OTF TTC.


. ( ELF ) TrueType … . … , , .


TTF- Windows 7 font list Ubuntu 18.04.4 LTS ( 500 TTF ).
TrueType — . .



— , . outline quality .


image


.


ttf2mesh . TTF_QUALITY_LOW, TTF_QUALITY_NORMAL TTF_QUALITY_HIGH. . .


image


"Q" 76, 97 175 .



, . — . . , . . :



  • .

, , U+2592 (▒). . , , Ctrl+V. … : , .
, ( ), EPSILON.


— .
. , . , - , . . ?


— .
Microsoft Apple. . , Microsoft Apple (. Overlapping contours) .


, ( , ?). — , . , even-odd , nonzero.


, 0.1% Windows 7. 497931 680 UNICODE:


UNICODE

Basic Latin — 14 errors
Latin-1 Supplement — 9 errors
Latin Extended-A — 2 errors
Greek and Coptic — 2 errors
Thai — 11 errors
Letterlike Symbols — 1 errors
Mathematical Operators — 1 errors
Block Elements — 1 errors
Geometric Shapes — 1 errors
Hiragana — 1 errors
Enclosed CJK Letters and Months — 1 errors
CJK Unified Ideographs Extension A — 74 errors
CJK Unified Ideographs — 555 errors
Private Use Area — 3 errors
CJK Compatibility Ideographs — 4 errors


, 36 497931 ( 0.01%). "Basic Latin", : IrisUPC, KodchiangUPC, LilyUPC, Footlight MT Light, Kunstler Script, Papyrus, Parchment Viner Hand ITC. UPC (Unity Progress Company).


, . , .



. "B", , 3 : - . "" 1 -. - . .


image


, , . U+00A2 — (), , ().


) image ) image


. — , . … . , . — "/" "C". . — , - "" .



, , . . . .


image


1) (y). p19, p15 .
2) . . , advancing front, . . .
3) , , 2 . , .
4) .3 , . p2.
5) . , . p5.


( Point event) , 2008 V. Domiter & B. Žalik "Sweep‐line algorithm for constrained Delaunay triangulation" (DOI: 10.1080/13658810701492241).


( ) , . , , . .


. , .


image


( X — , Y — ).


, , ( ) O(N). , O(N log N) , , . .


, , 2000 . "Tibetan Machine Uni" U+0FC7 (Tibetan Symbol Rdo Rje Rgya Gram) :


:


image


OpenGL MSAA:


image


...



. ( , , ) . , . .


ttf2mesh , . OBJ . , SVG , , PostScript.


. — , .


image


La bibliothèque ttf2mesh possède une licence MIT et est disponible ici . J'espère que ce sera socialement utile.


All Articles