{"id":43893959,"url":"https://github.com/lukaselmer/ethz-raytracer","last_synced_at":"2026-02-06T17:13:29.730Z","repository":{"id":11000673,"uuid":"13323600","full_name":"lukaselmer/ethz-raytracer","owner":"lukaselmer","description":"A raytracer for the computer graphics course at ethz","archived":false,"fork":false,"pushed_at":"2022-10-03T17:08:41.000Z","size":17531,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-14T18:10:33.789Z","etag":null,"topics":["algorithm","coffeescript","computer-graphics","deploy","eth","javascript","octree","project","raytracer","shadow","texture"],"latest_commit_sha":null,"homepage":"https://ethz-raytracer.firebaseapp.com/","language":"JavaScript","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/lukaselmer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-10-04T12:26:30.000Z","updated_at":"2022-10-03T16:27:15.000Z","dependencies_parsed_at":"2023-01-11T20:15:33.003Z","dependency_job_id":null,"html_url":"https://github.com/lukaselmer/ethz-raytracer","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lukaselmer/ethz-raytracer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukaselmer%2Fethz-raytracer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukaselmer%2Fethz-raytracer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukaselmer%2Fethz-raytracer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukaselmer%2Fethz-raytracer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukaselmer","download_url":"https://codeload.github.com/lukaselmer/ethz-raytracer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukaselmer%2Fethz-raytracer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29169394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T16:33:35.550Z","status":"ssl_error","status_checked_at":"2026-02-06T16:33:30.716Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["algorithm","coffeescript","computer-graphics","deploy","eth","javascript","octree","project","raytracer","shadow","texture"],"created_at":"2026-02-06T17:13:28.984Z","updated_at":"2026-02-06T17:13:29.720Z","avatar_url":"https://github.com/lukaselmer.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Ethz Raytracer\n==============\n\nA raytracer for the computer graphics course at ethz.\n\nLive demo\n---------\n\nThe renderer is deployed to https://ethz-raytracer.firebaseapp.com/\n\nAlternatively, the repository can be cloned from https://github.com/lukaselmer/ethz-raytracer , but then the code first has to be compiled (see compilation instructions).\n\nCompilation instructions\n------------------------\n\nThis raytracer is written in Coffeescript, which is very similar and compiles down to JavaScript. To compile the coffeescript sources:\n\n* Install NodeJS\n* `npm install --force`\n* `npm install -g grunt-cli`\n* `npm run build`\n\nYou can also use the `npm start` command to automatically build the files when the coffeescript files change.\n\nRunning the tests:\n\n* Unit tests: `grunt karma:unit` (run automatically when the JS files are changed, works fine with `grunt watch`)\n* CI tests `grunt karma:ci` (run only once, for continuous integration)\n\n\nCode structure\n--------------\n\nOverview of the public folder:\n\n```\npublic\n├── data (data used in C2 and C3)\n│   ├── Earth.tga\n│   ├── EarthNormal.tga\n│   ├── Moon.tga\n│   ├── MoonNormal.tga\n│   ├── ateneal.obj\n│   ├── ateneam.obj\n│   ├── dragon.obj\n│   ├── mini.obj\n│   ├── neoSimian-mech.obj\n│   ├── neoSimian-organic.obj\n│   ├── sphere.obj\n│   └── teapot.obj\n├── index.html (the main file to be opened in the browser)\n├── lib (libraries used for the raytracer)\n│   ├── bootstrap.min.js\n│   ├── jquery-1.10.2.min.js\n│   ├── read_obj.js\n│   ├── read_tga.js\n│   ├── startup.js\n│   └── sylvester.src.js\n├── out (compiled JS files)\n│   ├── compiled.js\n│   ├── compiled.js.map\n│   ├── compiled.min.js\n│   ├── compiled.src.coffee\n│   ├── compiled.src.js\n│   ├── compiled.src.map\n│   ├── v1_compiled.js\n│   └── v1_compiled.js.map\n├── output (rendered images)\n│   ├── cg-ex2-lukaselmer-A1.png\n│   ├── cg-ex2-lukaselmer-A1B1.png\n│   ├── cg-ex2-lukaselmer-A1B1B2.png\n│   ├── cg-ex2-lukaselmer-A1B2.png\n│   ├── cg-ex2-lukaselmer-B3.png\n│   ├── cg-ex2-lukaselmer-B3B1.png\n│   ├── cg-ex2-lukaselmer-B3B1B2.png\n│   ├── cg-ex2-lukaselmer-B3B2.png\n│   ├── cg-ex2-lukaselmer-B4.png\n│   ├── cg-ex2-lukaselmer-B4B1.png\n│   ├── cg-ex2-lukaselmer-B4B1B2.png\n│   └── cg-ex2-lukaselmer-moduleid.png\n└── src (source code)\n    ├── BoundingBox.coffee\n    ├── Camera.coffee\n    ├── Color.coffee\n    ├── Intersection.coffee\n    ├── Light.coffee\n    ├── LightIntensity.coffee\n    ├── MeshLoader.coffee\n    ├── NormalMap.coffee\n    ├── Octree.coffee\n    ├── Ray.coffee\n    ├── RayConfig.coffee\n    ├── RayTracer.coffee\n    ├── ReflectionProperty.coffee\n    ├── Scene.coffee\n    ├── SceneLoader.coffee\n    ├── Texture.coffee\n    ├── figures\n    │   ├── Cylinder.coffee\n    │   ├── Ellipsoid.coffee\n    │   ├── Hemisphere.coffee\n    │   ├── Mesh.coffee\n    │   ├── MultipleObjectsIntersection.coffee\n    │   ├── Plane.coffee\n    │   ├── Sphere.coffee\n    │   └── Triangle.coffee\n    └── helpers.coffee\n```\t\t\t\n\t\t\t\nUnit Tests\n----------\n\nThere are now some basic unit tests. To execute the tests run `grunt karma`. Make shure you run a browser on port 63342, otherwise the texture tests will fail.\n\n\nImplemented Features\n--------------------\n\nThe following features have been implemented:\n\n### A1: Basic features\n\n* Ray casting\n* Ray-object intersection\n* Shadows\n* Phong lighting model\n\n### B1: Specular reflection and specular refraction\n\nThe algorithm is programmed recursively.\n\n### B2: Anti-aliasing\n\nAnti-aliasing is implemented with a regular grid. Currently, there are no textures and with the current setup, no unwanted aliasing could be observed.\n\n### B3: Quadrics\n\nThe two quadrics are implemented.\n\n### B4: Boolean operations\n\nThe boolean operations are implemented.\n\n### C1: Stereoscopic rendering\n\nIs implemented, but yet untested due to the lack of stereoscopic glasses.\n\n### C2: Texture mapping and bump mapping\n\nIs implemented with\n\n* Surface mapping\n* Anti-aliasing\n* North poles are on top\n* Bump mapping\n\n### C3: Triangle meshes\n\nThe triangle meshes are implemented and some additional objects have been rendered.\n\n### D1: Octree\n\nIs implemented. Without the octree, rendering meshes is nearly impossible. The depth of the octree can be configured, and should be set high of objects with many faces.\n\n### D2: Area lights\n\nThe area lights for the shadow rays are implemented. The monte carlo integration is done with a jitter algorithm. Additional algorithms could be implemented.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukaselmer%2Fethz-raytracer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukaselmer%2Fethz-raytracer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukaselmer%2Fethz-raytracer/lists"}