{"id":20757487,"url":"https://github.com/sdragonx/tesselator","last_synced_at":"2025-07-16T11:42:08.395Z","repository":{"id":85668873,"uuid":"245855091","full_name":"sdragonx/tesselator","owner":"sdragonx","description":"tesselator(libtess) c++ version (c++98)","archived":false,"fork":false,"pushed_at":"2023-12-15T16:00:21.000Z","size":178,"stargazers_count":16,"open_issues_count":2,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T12:22:33.519Z","etag":null,"topics":["glutess","libtess","opengl","polygon","tesselate","tesselation","triangle"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sdragonx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-03-08T17:11:39.000Z","updated_at":"2024-12-24T06:18:38.000Z","dependencies_parsed_at":"2023-12-15T17:22:47.376Z","dependency_job_id":"2935e624-9331-45ae-a713-5c3859ef98f0","html_url":"https://github.com/sdragonx/tesselator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdragonx%2Ftesselator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdragonx%2Ftesselator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdragonx%2Ftesselator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdragonx%2Ftesselator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sdragonx","download_url":"https://codeload.github.com/sdragonx/tesselator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251599912,"owners_count":21615600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["glutess","libtess","opengl","polygon","tesselate","tesselation","triangle"],"created_at":"2024-11-17T09:42:57.387Z","updated_at":"2025-04-29T23:32:23.367Z","avatar_url":"https://github.com/sdragonx.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tesselator\n\nhttps://github.com/sdragonx/libtess\n\nthis is refactored version of the original libtess which comes with the GLU reference implementation.  \nthis is C++ version(c++98), Using STL as memory pool.  \nIndependent version without any third-party libraries, header files only.\n\n重构版本的 gluTesselation 库，C++98 版本，使用了 STL 容器做内存缓存。  \n不依赖任何三方库，独立版本，只需要引用头文件就能使用。  \n\n琢磨了几个月，这次心血来潮，重构了代码，用了十来天时间（记不清了）。  \n原版本是个C库，到处是跳转和 #define，要把这些分散的函数封装成类，难度颇大，改动一处错误百出。  \nlibtess2 作者对原代码重构过一次，但还是 C 版本，而且整体结构变动不大。  \n这次重构，看着 libtess2 的代码，又看着原版代码，为了查找错误，前后对照了几遍！吐血！  \n这次重构成 C++ 版本，是第一步，之后会进行后续优化。  \n\n也很纳闷，这么多年了，没有人重做一个OpenGL的三角形分解库，一直是 SGI 的这个 libtess。  \nGPC 简单易用，但是开源协议不友好；poly2tri 比 libtess快，但效果不如 libtess 好，有时候很不稳定。  \n希望我这个代码做个好的开头，有人能构建出更好更快的库，同时开源协议要友好。  \n\nFor OpenGL, For Open source !!!  \n\n# main class:\n\u003cpre\u003e\u003ccode\u003e\nclass Tesselator  \n{  \n  int init();  \n  void dispose();  \n  int add_contour( int size, const void* pointer, int stride, int count );  \n  int tesselate( TessWindingRule windingRule, TessElementType elementType, int polySize = 3);  \n};\n\u003c/code\u003e\u003c/pre\u003e\n# Exsample:\n\u003cpre\u003e\u003ccode\u003e\n\n#define LIBTESS_USE_VEC2\n\n#include \u003cgl/glew.h\u003e\n#include \u003clibtess/tess.hpp\u003e\n\nstruct vec2f  \n{  \n    float x, y;  \n};  \n  \n//tesselate polygons\nlibtess::Tesselator tess;  \ntess.init();  \n\nstd::vector\u003cVec2\u003e points;  \n//points.push_back(...)//add some points  \ntess.add_contour( 2, \u0026points[0], sizeof(Vec2), points.size() );  \n//tess.AddContour( ... );  \ntess.Tesselate( libtess::TESS_WINDING_ODD, libtess::TESS_TRIANGLES );  \n  \n//OpenGL drawing:\nvoid draw_elements(int shape, const Vec2* vs, const int* indices, int size)\n{\n    #ifdef LIBTESS_HIGH_PRECISION\n    glVertexPointer(2, GL_DOUBLE, sizeof(Vec2), vs);\n    #else\n    glVertexPointer(2, GL_FLOAT, sizeof(Vec2), vs);\n    #endif\n    glEnableClientState(GL_VERTEX_ARRAY);\n    glDrawElements(shape, size, GL_UNSIGNED_INT, indices);\n    glDisableClientState(GL_VERTEX_ARRAY);\n}\n\ndraw_elements(CGL_TRIANGLES, \u0026tess.vertices[0], \u0026tess.elements[0], tess.elements.size());\n\u003c/code\u003e\u003c/pre\u003e\n\nTESS_TRIANGLES执行结果:  \n![TESS_TRIANGLES执行结果](https://github.com/sdragonx/libtess/blob/master/TRIANGLES.png)\nTESS_BOUNDARY_CONTOURS执行结果:  \n![TESS_BOUNDARY_CONTOURS执行结果](https://github.com/sdragonx/libtess/blob/master/BOUNDARY_CONTOURS.png)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdragonx%2Ftesselator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsdragonx%2Ftesselator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdragonx%2Ftesselator/lists"}