{"id":20384356,"url":"https://github.com/Gyakobo/Terrain-Generation","last_synced_at":"2025-03-04T23:13:03.574Z","repository":{"id":132953474,"uuid":"489764209","full_name":"Gyakobo/Terrain-Generation","owner":"Gyakobo","description":"A procedural terrain generation project built with C++ and modern OpenGL. This repository implements noise-based algorithms and real-time rendering techniques to create realistic and visually stunning terrains.","archived":false,"fork":false,"pushed_at":"2025-01-31T04:37:45.000Z","size":1335,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T23:12:59.818Z","etag":null,"topics":["3d-graphics","3d-graphics-engine","c","c-plus-plus","glsl","perlin-noise","random","shading","terrain-generation","tesselation"],"latest_commit_sha":null,"homepage":"https://youtu.be/XFo5S1Zp8nw?si=UKknAWISYD1wFMC3","language":"C++","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/Gyakobo.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":"2022-05-07T19:28:28.000Z","updated_at":"2025-01-31T04:37:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"5b19bc79-bbf2-476d-bd8f-598e7d7342bb","html_url":"https://github.com/Gyakobo/Terrain-Generation","commit_stats":null,"previous_names":["gyakobo/terrain-generation","gyakobo/terrain_generation"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gyakobo%2FTerrain-Generation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gyakobo%2FTerrain-Generation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gyakobo%2FTerrain-Generation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gyakobo%2FTerrain-Generation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gyakobo","download_url":"https://codeload.github.com/Gyakobo/Terrain-Generation/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241935269,"owners_count":20044827,"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":["3d-graphics","3d-graphics-engine","c","c-plus-plus","glsl","perlin-noise","random","shading","terrain-generation","tesselation"],"created_at":"2024-11-15T02:27:29.960Z","updated_at":"2025-03-04T23:13:03.562Z","avatar_url":"https://github.com/Gyakobo.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terrain-Generation\n\n![image](https://img.shields.io/badge/C-00599C?style=for-the-badge\u0026logo=c\u0026logoColor=white)\n![image](https://img.shields.io/badge/C%2B%2B-00599C?style=for-the-badge\u0026logo=c%2B%2B\u0026logoColor=white)\n![image](https://img.shields.io/badge/CMake-064F8C?style=for-the-badge\u0026logo=cmake\u0026logoColor=white)\n![image](https://img.shields.io/badge/windows%20terminal-4D4D4D?style=for-the-badge\u0026logo=windows%20terminal\u0026logoColor=white)\n\nAuthor: [Andrew Gyakobo](https://github.com/Gyakobo)\n\nA procedural terrain generation project built with **C++** and modern OpenGL. This repository implements noise-based algorithms and real-time rendering techniques to create realistic and visually stunning terrains. The project leverages **ImGUI** for an interactive user interface, **GLEW** for OpenGL extensions, and **GLSL** for shader-based rendering.\n\n---\n\nhttps://github.com/user-attachments/assets/53823b99-ff5b-48bf-9746-29d1130756fa\n\n## Features\n\n- **Noise-Based Terrain**: Implements Perlin or other procedural noise algorithms for smooth, natural terrains.\n- **Real-Time Rendering**: Powered by OpenGL and GLSL shaders for efficient 3D visualizations.\n- **Interactive Controls**: Modify terrain parameters dynamically using the **ImGUI** interface.\n- **Customizable Settings**: Adjust resolution, noise parameters, and rendering modes in real-time.\n- **Camera Controls**: Navigate the terrain using a built-in camera system.\n\n---\n\n## Prerequisites\n\nEnsure your system has the following installed:\n\n- A C++ compiler (e.g., GCC, Clang, or MSVC)\n- OpenGL 3.3+ compatible GPU and drivers\n- [GLEW](http://glew.sourceforge.net/): OpenGL Extension Wrangler\n- [GLFW](https://www.glfw.org/): For creating windows and handling input\n- [ImGUI](https://github.com/ocornut/imgui): For user interface\n- [GLM](https://github.com/g-truc/glm): For mathematics (optional, but recommended)\n\n---\n\n## Getting Started\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/Gyakobo/Terrain-Generation.git\ncd Terrain-Generation\n```\n\n### 2. Build the Project\n\nFor Linux users you can run the program with the following:\n\n```bash \nsudo g++ -std=c++11 main.cpp src/*.cpp src/imgui/* -o main -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor -lGL -lGLEW \n\n# If the previous command didn't work out then please run the following where I specifically manually added all the necessary IMGUI dependencies\nsudo g++ -std=c++11 main.cpp src/*.cpp src/imgui/imgui.cpp src/imgui/imgui_impl_glfw_gl3.cpp src/imgui/imgui_demo.cpp src/imgui/imgui_draw.cpp -o main -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor -lGL -lGLEW \n\nsudo ./main\n```\n\nAlternatively, please just run the [build.sh](./build.sh) after you go it executable permissions: `sudo chmod +x build.sh`\n\nFor Windows users you should just:\n\n```bash\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake\n```\n\n## Methodology\n\nSo this should be the simple usage criteria:\n\n* **Modify Terrain Parameters**: Use the ImGUI panel to adjust noise parameters (scale, octaves, persistence) or change rendering options.\n\n* Camera Controls:\n    * W/A/S/D: Move forward/left/backward/right.\n    * Mouse Drag: Rotate the camera.\n    * Scroll: Zoom in/out.\n\n* Export Screenshots: Save a snapshot of the current view (if implemented).\n\n## Project Structure\n\n```\nTerrain-Generation/\n├── src/                # Source code\n│   ├── main.cpp        # Entry point\n│   ├── renderer.cpp    # Rendering logic\n│   ├── terrain.cpp     # Terrain generation logic\n│   ├── shaders/        # GLSL shader files\n├── include/            # Header files\n├── resources/          # Textures, configurations\n├── CMakeLists.txt      # Build configuration\n└── README.md           # Project documentation\n```\n\n## Future Features\n\n- [ ] Add support for advanced noise algorithms like Simplex or Worley noise\n- [ ] Implement texture mapping for more detailed terrains\n- [ ] Add water rendering with reflection/refraction effects\n- [x] Simulate dynamic lighting and shadows\n- [ ] Support terrain export as heightmaps or 3D models\n- [ ] Add more textures of maybed even a height-map\n- [ ] Generate texture wrappers(images) based on the features of the shape\n\n## License\nMIT\n\n\u003c!-- \u003e# The new and improved Viron Engine! \n\n## Simuliating a virus shell assembly\n\n* 95% of human, plant and animal viruses have **icosahedral** shaped shells. Even Polio, herpes, and AIDS have icosahedral shells. These shells come in a variety of sizes depending upon the virus and are generally made up of pentagons and hexagons. \n* A virus' shell should generally be big enough to contain the genomic information, which is the RNA or DNA of the virus, should be robust enough to withstand the immune system's offences and fragile enough to break down and let the genetic material sneak in the cell.\n\n---\n## Note\n* An **icosahedral** is a geometric shape with 20 sides(or faces), each composed of an equilateral triangle. An icosahedron has what is referred to as 2–3–5 symmetry, which is used to describe the possible ways that an icosahedron can rotate around an axis.\n\n![](IcosadralShapes.png)\n---\n\n* \"Nearly all previous research on interfering with the infection process has focused on how to prevent a fully-formed shell from binding to a cell. Our work aims at modeling how these shells build in the hopes of eventually suggesting ways of interfering with their growth and causing deformity. If this can be achieved, the genomic information won't fit inside the shell, and the virus won't be viable.\"\n\n* \"We have developed a hypothesis as to how virus shells form based solely on simple local rules for how proteins interact. We model virus shells as an interconnection network of proteins (i.e. nodes) and their essential binding interactions (i.e. edges). Chemically speaking, the nodes or proteins are usually all identical: however, they can be thought to behave differently because proteins can take on different shapes. We have shown that by utilizing only local communication, each node in the network can be given enough information to uniquely form any size shell. This information consists of the type of a node and its neighbors, bond angles, bond lengths, and torsional angles.\"\n\n[\"Local rule-based theory of virus shell assembly.\" Proc. Natl. Acad. Sci. USA Vol. 91, pp. 7732-7736, Aug. 1994] (http://people.csail.mit.edu/bab/virus/virus.html) --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGyakobo%2FTerrain-Generation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGyakobo%2FTerrain-Generation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGyakobo%2FTerrain-Generation/lists"}