{"id":20016553,"url":"https://github.com/spicycactuar/half-edge","last_synced_at":"2026-05-05T11:37:02.339Z","repository":{"id":262337948,"uuid":"886934130","full_name":"SpicyCactuar/half-edge","owner":"SpicyCactuar","description":"Triangle mesh rendered backed by a half-edge data structure","archived":false,"fork":false,"pushed_at":"2025-02-20T23:06:12.000Z","size":2596,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T02:47:11.262Z","etag":null,"topics":["computer-graphics","cpp","geometry-processing","half-edge-data-structure","opengl","qt5"],"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/SpicyCactuar.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":"2024-11-11T21:50:38.000Z","updated_at":"2025-02-20T23:06:16.000Z","dependencies_parsed_at":"2025-03-02T02:44:36.259Z","dependency_job_id":"b1d75131-4931-49fa-a1e3-992e993e5ef4","html_url":"https://github.com/SpicyCactuar/half-edge","commit_stats":null,"previous_names":["spicycactuar/half-edge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SpicyCactuar/half-edge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpicyCactuar%2Fhalf-edge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpicyCactuar%2Fhalf-edge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpicyCactuar%2Fhalf-edge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpicyCactuar%2Fhalf-edge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SpicyCactuar","download_url":"https://codeload.github.com/SpicyCactuar/half-edge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpicyCactuar%2Fhalf-edge/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264619232,"owners_count":23638417,"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":["computer-graphics","cpp","geometry-processing","half-edge-data-structure","opengl","qt5"],"created_at":"2024-11-13T08:09:28.286Z","updated_at":"2026-05-05T11:37:02.294Z","avatar_url":"https://github.com/SpicyCactuar.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Half Edge\n\n![half-edge](https://github.com/user-attachments/assets/03991a61-96ee-4e66-b433-41b3744409dc)\n\nQt application that displays triangle meshes backed by the [half-edge](https://jerryyin.info/geometry-processing-algorithms/half-edge/) data structure.\nThe program supports triangle soup (`.tri`) and custom half-edge (`.halfedge`) files, with samples being provided.\nIn addition, the mesh can be subdivided using the [loop subdivision](https://graphics.stanford.edu/~mdfisher/subdivision.html) technique.\n\n## Project Structure\n\n```plaintext\nhalf-edge/\n├── src/                   # Source code\n├── assets/                # Static assets\n    ├── tri                # .tri files\n    ├── halfedge           # .halfedge files\n├── half-edge.pro          # QMake project\n└── README.md              # Project README\n```\n\n## Build\n\n```bash\nqmake\nmake\n```\n\n## Run\n\n```bash\nbin/half-edge \u003c.tri or .halfedge file\u003e\n```\n\nExample `.tri`:\n\n```bash\nbin/half-edge assets/tri/cube.tri\n```\n\nExample `.halfedge`:\n\n```bash\nbin/half-edge assets/halfedge/cube.halfedge\n```\n\n## Controls\n\n| Key(s)                   | Action                             |\n|--------------------------|------------------------------------|\n| `(X, Y, Z)` Sliders      | Adjust the camera position         |\n| `Model` ArcBall          | Rotate mesh                        |\n| `Light` ArcBall          | Rotate directional light           |\n| `Flat Normals` Checkbox  | Toggle per vertex/per face normals |\n| `Show Vertices` Checkbox | Render spheres around vertices     |\n| `Vertex Size` Slider     | Control size of vertex spheres     |\n| `Subdivisions [0, 8]`    | Control current subdivision level  |\n\n## Technologies\n\n* **C++**: `\u003e= C++17`\n* **Qt**: `5.12.x`\n* **OpenGL**: `\u003e= 4.0`\n\nNewer versions of Qt might work correctly, if no breaking changes that affect the application were introduced.\n\nSubdivisions are computed lazily, but the computation occurs on the main thread.\nIf the mesh is sufficiently large, the program stalls.\n\n## TODOs\n\n* [ ] Parallelize subdivision computation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspicycactuar%2Fhalf-edge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspicycactuar%2Fhalf-edge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspicycactuar%2Fhalf-edge/lists"}