مكتبة Ttf2mesh - تحويل خطوط تروتايب إلى شبكة

يعرف الكثير من الناس مشكلة الرسومات ثلاثية الأبعاد - عدم وجود حلول خفيفة الوزن عبر الأنظمة الأساسية في قضية إخراج النص.


تسمح لك معظم عمليات التنفيذ باستخدام الخط المحدد كنسيج. تطبق مكتبة ttf2mesh المنشورة طريقة أخرى - فهي تحول أحرف ناقلات خط تروتايب إلى كائنات الشبكة. هذا يسمح لك بعرض النص كمجموعة من المثلثات.


صورة


هذا النهج له مزايا وعيوب مهمة. جلب تعقيد المهمة الموصوفة أدناه والتفكير في الأشكال الرائعة لتصميم الخط الكثير من المتعة في التطوير. اتمنى ان تستمتع بها ايضا


الانغماس في المشكلة


على موقع stackoverflow ، قد تصادف السؤال "كيف ترسم النص باستخدام طرق OpenGL فقط؟" . تبدأ الإجابة المفصلة عليها بعبارة "لماذا تكون صعبة". سأعطي ترجمة موجزة لهذه الإجابة ، لأنها أفضل - من الصعب وصف المشكلة.


الخطوط الشائعة (مثل TrueType أو OpenType) لها تنسيق متجه لتمثيل الأحرف: يتم تعريف الخطوط العريضة لها بمجموعة من منحنيات Bezier.


صورة


— OpenGL, (, , ).


, CPU, — OpenGL- . , . :


صورة


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


صورة


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 .


صورة


.


ttf2mesh . TTF_QUALITY_LOW, TTF_QUALITY_NORMAL TTF_QUALITY_HIGH. . .


صورة


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


صورة


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


) صورة ) صورة


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



, , . . . .


صورة


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


( ) , . , , . .


. , .


صورة


( X — , Y — ).


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


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


:


صورة


OpenGL MSAA:


صورة


...



. ( , , ) . , . .


ttf2mesh , . OBJ . , SVG , , PostScript.


. — , .


صورة


مكتبة ttf2mesh لديها ترخيص MIT وهي متاحة هنا . آمل أن تكون مفيدة اجتماعيا.


All Articles