{"id":25599367,"url":"https://github.com/tca166/crawler","last_synced_at":"2026-06-21T02:31:32.142Z","repository":{"id":276688547,"uuid":"880826759","full_name":"TCA166/crawler","owner":"TCA166","description":"Final project for the Computer Graphics class","archived":false,"fork":false,"pushed_at":"2025-02-10T09:46:43.000Z","size":120962,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-21T14:40:51.783Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://tca166.github.io/crawler/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TCA166.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-30T12:40:18.000Z","updated_at":"2025-02-10T09:46:46.000Z","dependencies_parsed_at":"2025-02-09T21:28:54.982Z","dependency_job_id":"9b02a55a-f9b9-4e61-8c2c-5ecc38a4ac22","html_url":"https://github.com/TCA166/crawler","commit_stats":null,"previous_names":["tca166/crawler"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/TCA166/crawler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TCA166%2Fcrawler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TCA166%2Fcrawler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TCA166%2Fcrawler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TCA166%2Fcrawler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TCA166","download_url":"https://codeload.github.com/TCA166/crawler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TCA166%2Fcrawler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34592050,"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-21T02:00:05.568Z","response_time":54,"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":[],"created_at":"2025-02-21T14:34:13.833Z","updated_at":"2026-06-21T02:31:32.120Z","avatar_url":"https://github.com/TCA166.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# crawler\n\nComputer Graphics class final project.\n\n## Scene\n\nA night scene in a forest, with multiple objects flocking in separate groups.\nThe \"player\" is free to roam this landscape with a shotgun. Any of the flying\nobjects once shot will disappear.\n\n## Features\n\n- [Shadow Mapping](./shaders/textured.frag)\n- [Collision detection](./src/engine/utils/collision.cpp) (bounding box\n    detection)\n- [Procedurally generated terrain](./src/objects/random_floor.hpp)\n- [Procedurally generated trees](./src/objects/tree.hpp)\n- Multiple light source support\n- Normal mapping\n- [Flocking](./src/objects/boid.hpp) (altered algorithm featuring preferred y\n    and multiple flocks)\n- [Procedural texture generation](./src/objects/leaves.hpp)\n- [Instancing](./src/engine/renderable/model.cpp)\n- [Skybox](./src/engine/renderable/skybox.cpp)\n- multithreading\n- [separate window with a radar of boids](./src/scenes/radar.cpp)\n\n### Engine\n\nOur project features a fully fledged out engine, very much capable and ready\nfor possible future re-use. We have implemented a whole class dependency\nstructure, which did indeed help during development. The engine is\nmulti-threaded, does support multiple windows, and even viewing the same scene\nfrom two different cameras from two different windows. The full documentation\nfor this engine can be found [here](https://tca166.github.io/crawler/).\n\n#### Pipeline\n\nIn our engine a pretty standard rendering pipeline was implemented.\nFor each window a separate `renderer` instance exists. This renderer has\nan attached scene. Renderer handles all the I/O, and interacts with the window,\ncreating a nice abstract environment for the `scene` to render it's contents.\nThe scene handles in broad strokes how everything is rendered. It mandates a\nshadow pass, which objects are rendered etc. During rendering the objects\nare rendered in bulk, in accordance with their shader, minimizing shader state\nswitches and uniform passing operations. A `scene` provides the objects, chosen\nto be rendered with a nice abstraction, providing them with an already loaded\nshader with passed view and projection matrices and other necessary information.\nAn `object` when being rendered usually just passes it's model matrices to the\nshader and then calls draw on the `model` it holds. The `model` class handles\nall the nitty-gritty OpenGL buffer handling, and also has a subclass\n`model_instanced` that supports instanced rendering. With this pipeline we have\na very modular system that allows for very easy modification.\n\n#### Asset Loading\n\nWithin our engine we have adopted the use of centralized model loading\nfacilities. With these factory singletons we can easily cache required\nimages, models and shader, while also allowing for static asset storage,\nsomething that our engine does indeed allow for.\n\n#### Collision detection\n\nWithin our engine we have adopted bounding box collision detection. However\nwe don't require our bounds to be axis aligned. Depending on the situation,\nhowever we can easily combine the colliders, thanks to the modularity of the\nengine. It's as simple as overriding the method related to collision and then,\nfor example, checking two different box colliders depending on position.\n\n### Flocking\n\nWe have implemented flocking within our project. The boids move accordingly\nwith forces that act upon them. Then we simply adjust the forces based on\nthe position of nearby boids and their velocity. Apart from that we have also\nadded species into the algorithm, meaning that boids will stick to their own\nspecies, avoiding foreign boids more than they like to keep to their own,\nand also added specific preferred y levels for boid species and random\nperturbations, meaning that the movements shouldn't become too static.\n\n### Procedural generation\n\nOur project utilizes a scene that is almost entirely procedurally generated.\nThe terrain is generated using a 2D perlin noise map, and the trees are\nalso procedurally generated, with the instanced leaves utilizing the same\nnoise for a texture.\n\n## Compilation\n\nThe source code, *should*, be platform independent. It was tested on both\nWindows and Linux and C++11 compliant.\n\n### Linux\n\nThe best way to compile under Linux is to use Make. Just issue the following\ncommand in project root:\n\n```bash\nmake main\n```\n\nIt should create a ```main``` executable file in project root. In case of\nlink errors try to install dependencies using the ```dependencies-dnf``` target\nor ```dependencies-apt``` target.\n\n### Windows\n\nTo compile this project on Windows, you need to ensure you have the necessary\nlibraries, such as GLFW, GLEW, SOIL, GLM, GLUT and Assimp installed and linked\ncorrectly. Ensure your project follows this directory structure:\n\n```markdown\n/project-root\n|- lib/          # Contains .lib files for linking\n|- include/      # Contains header files (.h, .hpp) for dependencies\n|- main.cpp      # Source file\n```\n\nRealistically speaking compiling this on Windows is such a hassle. We did\nexperiment with running this project in WSL, and caused a segfault in the\nvirtual graphics driver.\n\n## WASM\n\nWe did experiment with compiling and running this project under Web Assembly.\nOur project does compile for web assembly, and in theory we are entirely\nstandard compliant and should be able to run under WASM. However due to minor\ntechnical differences (and not so minor ones) the runtime always seemed to stall\non load. Lack of threading and cost associated with virtualization certainly\ndidn't help. We speculate, that in order to properly run a project of this scale\nunder web assembly, a low level redesign of the pipeline would be needed. In\nshort: one would need to build an engine for WASM first, everything else second.\nHowever, the technical backend for running this in WASM is here.\nHere's how to compile and run this for Web Assembly:\n\n1. Install [emscripten](https://emscripten.org/docs/getting_started/downloads.html)\n2. Run ```source ./emsdk_env.sh``` in your install directory\n3. Compile this using ```make main.html```\n4. Run ```emrun main.html```\n\n## Compile flags\n\nHere are all available define flags that change program behavior:\n\n1. ```WASM``` will disable OpenGL (GLFW, GLEW) calls that are unavailable in web\n    environments\n2. ```STATIC_ASSETS``` will make it so that ```SOIL``` and ```Assimp``` are no\n    longer requirements, and all assets are loaded on compile time\n3. ```NO_THREADS``` will disable threading, reducing performance, but improving\n    compatibility\n\n## License\n\nThis project is licensed under GPLv3, this includes the code (bar for a single\nexplicit exception) in C++ and GLSL. The wavefront and image assets belong to\ntheir respective copyright owners.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftca166%2Fcrawler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftca166%2Fcrawler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftca166%2Fcrawler/lists"}