Biblioteca ttf2mesh: convierte fuentes TrueType en una cuadrícula

Muchas personas conocen el problema de los gráficos tridimensionales: la falta de soluciones ligeras multiplataforma en el tema de la salida de texto.


La mayoría de las implementaciones le permiten usar la fuente seleccionada como textura. La biblioteca ttf2mesh publicada se implementa de otra manera: convierte los caracteres del vector de fuente TrueType en objetos de cuadrícula. Esto le permite mostrar texto como un conjunto de triángulos.


imagen


Este enfoque tiene importantes ventajas y desventajas. La complejidad de la tarea que se describe a continuación y la contemplación de las magníficas formas de diseño de fuentes trajeron mucho placer en el desarrollo. Espero que lo disfrutes también.


Inmersión en el problema


En el sitio web stackoverflow, puede encontrar la pregunta "¿Cómo dibujar texto usando solo métodos OpenGL?" . Una respuesta detallada comienza con la frase "Por qué es difícil". Daré una breve traducción de esta respuesta, ya que es mejor, es casi imposible describir el problema.


Las fuentes comunes (como TrueType u OpenType) tienen un formato vectorial para representar caracteres: su contorno está definido por un conjunto de curvas de Bezier.


imagen


— OpenGL, (, , ).


, CPU, — OpenGL- . , . :


imagen


, . , 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 ):


imagen


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 .


imagen


.


ttf2mesh . TTF_QUALITY_LOW, TTF_QUALITY_NORMAL TTF_QUALITY_HIGH. . .


imagen


"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 -. - . .


imagen


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


) imagen ) imagen


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



, , . . . .


imagen


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).


( ) , . , , . .


. , .


imagen


( X — , Y — ).


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


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


:


imagen


OpenGL MSAA:


imagen


...



. ( , , ) . , . .


ttf2mesh , . OBJ . , SVG , , PostScript.


. — , .


imagen


La biblioteca ttf2mesh tiene una licencia MIT y está disponible aquí . Espero que sea socialmente útil.


All Articles