{"id":25872853,"url":"https://github.com/hcschuetz/sphere-texturing","last_synced_at":"2026-06-10T15:31:42.015Z","repository":{"id":240071738,"uuid":"801102495","full_name":"hcschuetz/sphere-texturing","owner":"hcschuetz","description":"texture layouts for spheres","archived":false,"fork":false,"pushed_at":"2024-08-10T00:33:31.000Z","size":16997,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T08:33:46.024Z","etag":null,"topics":["geometry","icosphere","octasphere","sphere","texture-generation","texture-mapping"],"latest_commit_sha":null,"homepage":"https://hcschuetz.github.io/sphere-texturing/map-transformations/dist/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hcschuetz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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-05-15T15:41:02.000Z","updated_at":"2024-08-10T00:33:34.000Z","dependencies_parsed_at":"2025-03-02T08:39:08.221Z","dependency_job_id":null,"html_url":"https://github.com/hcschuetz/sphere-texturing","commit_stats":null,"previous_names":["hcschuetz/sphere-texturing"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hcschuetz/sphere-texturing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hcschuetz%2Fsphere-texturing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hcschuetz%2Fsphere-texturing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hcschuetz%2Fsphere-texturing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hcschuetz%2Fsphere-texturing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hcschuetz","download_url":"https://codeload.github.com/hcschuetz/sphere-texturing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hcschuetz%2Fsphere-texturing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34159249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","icosphere","octasphere","sphere","texture-generation","texture-mapping"],"created_at":"2025-03-02T08:28:52.162Z","updated_at":"2026-06-10T15:31:41.989Z","avatar_url":"https://github.com/hcschuetz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Sub-Projects\n------------\n\nSub-projects in this repository:\n- Experiments with texture mappings\n  ([source](./earth/), [web app](https://hcschuetz.github.io/sphere-texturing/earth/dist/))\n- A presentation on map/texture transformations\n  ([source](./map-transformations/),\n  [web app](https://hcschuetz.github.io/sphere-texturing/map-transformations/dist/))\n\n\nTexture Layouts For Spheres\n===========================\n\nThe most common way to render a sphere is based on the latitude/longitude grid\nas it is used for the earth:\nSelect two opposite points on the sphere as the \"poles\",\na bunch of equidistant \"meridians\", and a bunch of equidistant \"parallels\".\nIntroduce a vertex at each intersection of a meridian and a parallel\nand connect neighboring vertices.\nThis divides the sphere into a set of quadrangles.\nDividing each quadrangle along one of its diagonals\ngives a triangulation of the sphere.\n\nThe natural texture for such a \"lat/long sphere\" is a map with a\n[equirectangular projection](https://en.wikipedia.org/wiki/Equirectangular_projection).\nThis is easy to implement and good enough for many applications.\nBut while the distance between meridians gets smaller and smaller near the poles\non the sphere,\nthe meridians have a constant distance on the map.\nThis leads to some drawbacks:\n- Equirectangular maps are heavily distorted.\n- Texture memory is wasted.\n- Half of the triangles around the poles are degenerated on the sphere\n  and thus the corresponding parts of the texture/map are not rendered.\n\nTo avoid these drawbacks\nthis project investigates texture mappings based on octaspheres and icospheres.\n\nSee the README files of the subprojects for more details.\n\n\nRelation to Paper Maps\n----------------------\n\nProjections from a sphere to a plane\nare not only needed for textures in computer graphics,\nbut also for traditional paper maps of the Earth.\nThere are several desirable properties of such a projection such as\nthe accurate representation of distances, areas, angles and compass directions.\nIt is not possible to achieve all these goals in a single projection.\nThus over the centuries many different projections have been developed,\neach based on some choice or compromise between the goals according to some use case.\n(And actually the simplicity of a mapping is another aspect that might\nbe considered in the trade-off.)\n\nFrom the vast amount of resources discussing sphere-to-plane projections\nhere are just a few:\n- A nice [overview video](https://www.youtube.com/watch?v=bpp0xCknQAQ)\n  on map projections with some math background.\n\n- [Gene Keyes' discussion of map projections](https://www.genekeyes.com/FULLER/BF-1-intro.html)\n  is interesting here for two reasons:\n  - It discusses projections based on an octahedron and an icosahedron.\n    (See appendix 2 of [part 2](https://www.genekeyes.com/FULLER/BF-2-1943.html)\n    for an icosahedral map similar to ours.)\n  - It deals with paper maps that are actually folded to 3D objects.\n\n- [This video](https://www.youtube.com/watch?v=vfOcYUWfVqE) (mentioned by Keyes)\n  shows a map unfolding somewhat similar to ours.\n\nNotice the following differences between mappings to paper and mappings to a texture:\n\n- In contrast to paper maps,\n  textures should be easily applicable to a triangulated sphere.\n\n- For projections between a sphere and a texture\n  it is a bit less important to minimize various kinds of distortions\n  if the distortions introduced by the projection\n  will be reversed when the texture is applied to a sphere.\n  But while the user will not see a distorted surface,\n  mapping distortions will cause the available level of detail to vary across the sphere.\n  And typically we want to limit this variation.\n\n- Maps try to be contiguous (at least on the continents) so that nearby points\n  on the earth will also be nearby on the map.\n  For textures this is not important,\n  provided we have a good \"sewing\" mechanism.\n  This allows us to use more cuts in the mapping to improve other aspects\n  such as reducing distortion and arranging the map in a memory-efficient way.\n\nThus the trade-offs differ between paper maps and textures and may lead\nto different solutions.\nFor example in our octahedral and icosahedral projections we save memory\nby moving triangles from the south-pole region to the gaps between\ntriangles in the north-pole region.\nSuch a representation would be confusing on a map directly viewed by a user.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhcschuetz%2Fsphere-texturing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhcschuetz%2Fsphere-texturing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhcschuetz%2Fsphere-texturing/lists"}