{"id":1454,"date":"2024-02-13T19:44:12","date_gmt":"2024-02-13T23:44:12","guid":{"rendered":"https:\/\/jausoft.com\/blog\/?p=1454"},"modified":"2025-08-27T06:27:36","modified_gmt":"2025-08-27T10:27:36","slug":"fixing-jogamps-graph-delaunay-tessellation-of-complex-non-convex-shapes","status":"publish","type":"post","link":"https:\/\/jausoft.com\/blog\/2024\/02\/13\/fixing-jogamps-graph-delaunay-tessellation-of-complex-non-convex-shapes\/","title":{"rendered":"Fixing JogAmp&#8217;s Graph Delaunay Tessellation of Complex Non-Convex Shapes"},"content":{"rendered":"<p>After rendering our <a href=\"https:\/\/jausoft.com\/blog\/2024\/02\/07\/graphui-mediaplayer-feature-complete\/\">GraphUI MediaPlayer feature complete<\/a>, also capable to use Chinese\/CJK fallback fonts it was time for another round to fix our outstanding Graph Delaunay tessellation issues. Minimum goal was to at least have the Chinese\/CJK fonts being readable &#8211; but gladly more has been achieved in the <a href=\"https:\/\/jogamp.org\/bugzilla\/\/show_bug.cgi?id=1501\">resolution for Bug 1501<\/a> as shown below.<!--more--><span id=\"more-1430\"><\/span><\/p>\n<p>First, let&#8217;s have a look how the GraphUI MediaPlayer looks now with fixed CJK font rendering and also fixed material-font for the buttons.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1468\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/UIMediaGrid01-norm-q1-s01-fsaa8-media-snap04-1920x1080.png.jpg\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/UIMediaGrid01-norm-q1-s01-fsaa8-media-snap04-1920x1080.png.jpg 1920w, https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/UIMediaGrid01-norm-q1-s01-fsaa8-media-snap04-1920x1080.png-300x169.jpg 300w, https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/UIMediaGrid01-norm-q1-s01-fsaa8-media-snap04-1920x1080.png-768x432.jpg 768w, https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/UIMediaGrid01-norm-q1-s01-fsaa8-media-snap04-1920x1080.png-1536x864.jpg 1536w, https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/UIMediaGrid01-norm-q1-s01-fsaa8-media-snap04-1920x1080.png-1088x612.jpg 1088w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p>The solution was to apply intersection tests for non-convex shapes to reject new CCW \u00a0and non-circumcircle triangulation candidates in our Delaunay tessellator.<\/p>\n<p>The used Delaunay tessellation works well with (almost) convex shapes. In case e.g. a glyph gets to the extremes like &#8216;M&#8217; in FreeMono or any other complex Chinese symbol &#8211; it may just simply happen that the new non-circumcircle triangle point crosses the inner (hole) or outer boundaries of the given polygon.<\/p>\n<p>This results in mostly proper rendered Chinese fonts, see <em>Droid Sans Fallback-Regular<\/em><\/p>\n<div id='gallery-1' class='gallery galleryid-1454 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-droid_sans_fallback_regular_cp3086-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-Droid_Sans_Fallback_Regular_cp3086-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1467\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-1467'>\n\t\t\t\tCJK Set 1 &#8211; Image 1\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-droid_sans_fallback_regular_cp55fc-snap04-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-Droid_Sans_Fallback_Regular_cp55fc-snap04-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1466\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-1466'>\n\t\t\t\tCJK Set 1 &#8211; Image 2\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-droid_sans_fallback_regular_cp34a2-snap02-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-Droid_Sans_Fallback_Regular_cp34a2-snap02-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1465\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-1-1465'>\n\t\t\t\tCJK Set 1 &#8211; Image 3\n\t\t\t\t<\/figcaption><\/figure>\n\t\t<\/div>\n\n<p>Western glyphs with the usual fonts in regular mode are also in good shape now<\/p>\n<div id='gallery-2' class='gallery galleryid-1454 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-arial_regular_cp1fd-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-Arial_Regular_cp1fd-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-2-1463\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-2-1463'>\n\t\t\t\tArial Regular\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-times_new_roman_regular_cp148-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-Times_New_Roman_Regular_cp148-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-2-1462\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-2-1462'>\n\t\t\t\tTimes New Roman Regular\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freeserif_regular_cpe5b-snap02-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeSerif_Regular_cpe5b-snap02-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-2-1460\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-2-1460'>\n\t\t\t\tFree Serif Regular 1\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freeserif_regular_cpa7-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeSerif_Regular_cpa7-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-2-1459\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-2-1459'>\n\t\t\t\tFree Serif Regular 2\n\t\t\t\t<\/figcaption><\/figure>\n\t\t<\/div>\n\n<p>Finally our problem font Free Mono is also readable by now<\/p>\n<div id='gallery-3' class='gallery galleryid-1454 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freemono_regular_cp20dd-snap03-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeMono_Regular_cp20dd-snap03-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-3-1455\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-3-1455'>\n\t\t\t\tFree Mono Regular 1\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freemono_regular_cp46c-snap02-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeMono_Regular_cp46c-snap02-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-3-1456\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-3-1456'>\n\t\t\t\tFree Mono Regular 2\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freemono_regular_cp4d-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeMono_Regular_cp4d-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-3-1457\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-3-1457'>\n\t\t\t\tFree Mono Regular 3\n\t\t\t\t<\/figcaption><\/figure>\n\t\t<\/div>\n\n<p>Last but not least a few bold font examples &#8230;<\/p>\n<div id='gallery-4' class='gallery galleryid-1454 gallery-columns-3 gallery-size-thumbnail'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-arial_bold_cp1fd-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-Arial_Bold_cp1fd-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-4-1464\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-4-1464'>\n\t\t\t\tArial Bold\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freeserif_bold_cp19b-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeSerif_Bold_cp19b-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-4-1461\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-4-1461'>\n\t\t\t\tFree Serif Bold\n\t\t\t\t<\/figcaption><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jausoft.com\/blog\/fontview01-norm-q0-s01-fsaa8-freemono_bold_cp1b8-snap01-1920x1080\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jausoft.com\/blog\/wp-content\/uploads\/2024\/02\/FontView01-norm-q0-s01-fsaa8-FreeMono_Bold_cp1b8-snap01-1920x1080-1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-4-1458\" \/><\/a>\n\t\t\t<\/div>\n\t\t\t\t<figcaption class='wp-caption-text gallery-caption' id='gallery-4-1458'>\n\t\t\t\tFree Mono Bold\n\t\t\t\t<\/figcaption><\/figure>\n\t\t<\/div>\n\n<p style=\"text-align: center;\">***<\/p>\n<p>Interested companies &amp; organization desiring to adopt &amp; license this technology, as well as to support the work are more than welcome to contact us at <strong><a title=\"Maintainer and Contacts\" href=\"https:\/\/jogamp.org\/wiki\/index.php?title=Maintainer_and_Contacts#Commercial_Support\">G\u00f6thel Software e.K.<\/a><\/strong> We are also open to other contracting opportunities <a href=\"https:\/\/jausoft.com\/team_en_sgothel.html\">across C++\/Java from biz-application, medical device application to the embedded space<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>After rendering our GraphUI MediaPlayer feature complete, also capable to use Chinese\/CJK fallback fonts it was time for another round to fix our outstanding Graph Delaunay tessellation issues. Minimum goal was to at least have the Chinese\/CJK fonts being readable &#8211; but gladly more has been achieved in the resolution for Bug 1501 as shown&hellip; <a class=\"more-link\" href=\"https:\/\/jausoft.com\/blog\/2024\/02\/13\/fixing-jogamps-graph-delaunay-tessellation-of-complex-non-convex-shapes\/\">Continue reading <span class=\"screen-reader-text\">Fixing JogAmp&#8217;s Graph Delaunay Tessellation of Complex Non-Convex Shapes<\/span> <span class=\"meta-nav\" aria-hidden=\"true\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[7,3,8],"tags":[9,79,13,22,71,16,44,17,46,68,73],"class_list":["post-1454","post","type-post","status-publish","format-standard","hentry","category-3d-opengl","category-computer-stuff","category-jogamp","tag-3d","tag-computer-graphics","tag-embedded-device","tag-fonts","tag-graph_type_rendering","tag-java","tag-jogamp","tag-opengl","tag-openjdk","tag-type-rendering","tag-video"],"_links":{"self":[{"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/posts\/1454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/comments?post=1454"}],"version-history":[{"count":3,"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/posts\/1454\/revisions"}],"predecessor-version":[{"id":1471,"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/posts\/1454\/revisions\/1471"}],"wp:attachment":[{"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/media?parent=1454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/categories?post=1454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jausoft.com\/blog\/wp-json\/wp\/v2\/tags?post=1454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}