{"id":21879744,"url":"https://github.com/vikastmz/geometry_processing","last_synced_at":"2025-03-22T00:17:54.691Z","repository":{"id":78621139,"uuid":"272048203","full_name":"vikasTmz/Geometry_Processing","owner":"vikasTmz","description":"Code to perform Mesh operations like​ Subdivisions, Simplification and Remeshing ​written in C++.","archived":false,"fork":false,"pushed_at":"2022-10-31T04:36:29.000Z","size":3647,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-26T18:34:03.298Z","etag":null,"topics":["geometry-processing","loop-subdivision","mesh","mesh-processing","remeshing","simplification","subdivision"],"latest_commit_sha":null,"homepage":"","language":null,"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/vikasTmz.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-13T16:45:30.000Z","updated_at":"2022-11-05T10:39:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"fffbb108-6c4b-42d9-adba-475e1e2d9539","html_url":"https://github.com/vikasTmz/Geometry_Processing","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/vikasTmz%2FGeometry_Processing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikasTmz%2FGeometry_Processing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikasTmz%2FGeometry_Processing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikasTmz%2FGeometry_Processing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vikasTmz","download_url":"https://codeload.github.com/vikasTmz/Geometry_Processing/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244885696,"owners_count":20526296,"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":["geometry-processing","loop-subdivision","mesh","mesh-processing","remeshing","simplification","subdivision"],"created_at":"2024-11-28T08:18:20.816Z","updated_at":"2025-03-22T00:17:54.637Z","avatar_url":"https://github.com/vikasTmz.png","language":null,"readme":"# Mesh Operations: Geometry Processing\n\nPart of [Brown University CSCI2240](https://dritchie.github.io/csci2240/) assignment.\n\n\n## Description\n\nThis project contains code to perform Mesh operations written in C++ and was built on top of the Stencil code provided to\nus by the instructors of CSCI2240. Implemented Loop Subdivision, Garland and Heckbert simplification and Iso Remeshing supported by half edge datastructure.\n\n## Requirements\n\n```\nQt ( \u003e 5.9.0)\nQt Creator ( \u003e 4.5.0)\nOpenMP\n```\n\n## Implementation\n\n### Edge Split ​✔\n\n\u003cimg src=\"images/split.png\"  style=\"width: 500px;\" /\u003e\n\n### Edge Flip ​✔\n\n\u003cimg src=\"images/flip.png\"  style=\"width: 500px;\" /\u003e\n\n### Edge Collapse ​✔\n\n\u003cimg src=\"images/collapse.png\"  style=\"width: 500px;\" /\u003e\n\n### Loop Subdivision ​✔\n\n\u003cimg src=\"images/ico_sub.png\"  style=\"width: 500px;\" /\u003e\n\n\u003cimg src=\"images/cow_tea_sub.png\"  style=\"width: 500px;\" /\u003e\n\n### Garland and Heckbert Simplification (using quadric error metrics) ​✔\n\n\u003cimg src=\"images/moo_bean_sim.png\"  style=\"width: 500px;\" /\u003e\n\n\u003cimg src=\"images/ico_sim.png\"  style=\"width: 500px;\" /\u003e\n\n\u003cimg src=\"images/sim_sub.png\"  style=\"width: 500px;\" /\u003e\n \nFrom Fig 7 it can be seen that repeated subdivisions and simplifications cause the triangles of the mesh to become irregular. The leftmost image is a regular icosahedron with equilateral triangles but the middle and the rightmost image are icosahedrons with non-equilateral triangles. However, subdivision and simplification combined together preserve the number of vertices and faces.\n\n### Isotropic remeshing ​✔\n\n\u003cimg src=\"images/peter_remesh.png\"  style=\"width: 500px;\" /\u003e\n\n\u003cimg src=\"images/bunny_remesh.png\"  style=\"width: 500px;\" /\u003e\n\n*Do operations in my code make a manifold mesh into a non-manifold one?*\n\nRemeshing the Stanford bunny model caused the flipMethod to create a non-manifold mesh. However, this is handled in the code by checking if the degree of the `face == 3` and if the neighbouring vertices positions create a “fan-like” structure.\n\n### Mesh with boundaries ​✔\n\nI have implemented boundary handling as part of my halfedge data structure. The idea was inspired by Prof. Keenan\nCrane’s implementation and notes of the half edge data structure. The boundary boolean is defined for a face (in the face\nclass) and the boolean method for both edge and vertex are derived from this i.e for an edge we check if it’s/twin’s face is a boundary and for a vertex we check if one of the edge it is connected to is a boundary (through the aforementioned way).\n\nSubsequently, in each of my flip, split, collapse, subdivision, simplification and remeshing functions, I check if a vertex or edge that is being iterated over is a boundary and proceed accordingly.\n\nIn the below example, I removed a side (two triangles) from a cube mesh, thus creating a boundary condition and subdivided it.\n\n\u003cimg src=\"images/bound1.png\"  style=\"width: 500px;\" /\u003e\n\n\u003cimg src=\"images/bound2.png\"  style=\"width: 500px;\" /\u003e\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikastmz%2Fgeometry_processing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvikastmz%2Fgeometry_processing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikastmz%2Fgeometry_processing/lists"}