{"id":17340021,"url":"https://github.com/resetius/graphtoys","last_synced_at":"2025-04-14T18:50:48.097Z","repository":{"id":41485489,"uuid":"439716531","full_name":"resetius/graphtoys","owner":"resetius","description":"Cross-platform simple 3d engine","archived":false,"fork":false,"pushed_at":"2023-11-15T21:24:31.000Z","size":3887,"stargazers_count":8,"open_issues_count":11,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T07:11:34.782Z","etag":null,"topics":["fractal","n-body","opengl","vulkan"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/resetius.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}},"created_at":"2021-12-18T21:16:40.000Z","updated_at":"2024-12-28T14:52:10.000Z","dependencies_parsed_at":"2023-11-08T03:31:34.592Z","dependency_job_id":"bb7f81d6-8e66-4e97-9b0d-f0bc86be0864","html_url":"https://github.com/resetius/graphtoys","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resetius%2Fgraphtoys","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resetius%2Fgraphtoys/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resetius%2Fgraphtoys/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resetius%2Fgraphtoys/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/resetius","download_url":"https://codeload.github.com/resetius/graphtoys/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248941469,"owners_count":21186914,"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":["fractal","n-body","opengl","vulkan"],"created_at":"2024-10-15T15:43:48.259Z","updated_at":"2025-04-14T18:50:48.068Z","avatar_url":"https://github.com/resetius.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Introduction\nWelcome to the GraphToys project! This repository contains a collection of various graphical models and simulations, showcasing different aspects of computer graphics and simulation techniques.\n\n### Building the Project\nYou can build the project using either `make` or `CMake`. Both options are supported.\n\n#### Prerequisites\n- Ensure you have either `make` or `CMake` installed on your system.\n- Git should be installed for managing submodules.\n- vulkan headers, vulkan libs, glslc, glfw3, freetype2\n\n#### Steps to Build\n1. **Clone the Repository**: First, clone this repository to your local machine using:\n   ```\n   git clone https://github.com/resetius/graphtoys\n   ```\n2. **Initialize and Update Git Submodules**: Before building, initialize and download the necessary git submodules:\n   ```\n   git submodule init\n   git submodule update\n   ```\n3. **Build the Project**:\n   - Using `make`:\n     ```\n     make\n     ```\n   - Using `CMake`:\n     ```\n     mkdir build\n     cd build\n     cmake ..\n     make\n     ```\n\n### Running the Application\nAfter building, you can run the application using the following command:\n```\n./main.exe model_name --cfg config-file\n```\nReplace `model_name` with the name of the model you want to run, and `config-file` with the path to your configuration file if needed.\n\n### Models\nHere are the models you can explore in this project:\n\n1. **torus**: A simple rotating torus model.\n2. **triangle**: A basic triangle shape.\n3. **mandelbrot**: Visualization of the Mandelbrot set.\n4. **mandelbulb**: A 3D analog of the Mandelbrot set.\n5. **stl**: Loads a model in STL format from a file.\n6. **particles**: A particle model with calculations based on Newton's laws.\n7. **particles2**: A particle model using only vertex shaders for calculations.\n8. **particles3**: Particle model algorithms using PM and P3M.\n9. **poisson**: Solves the Poisson equation (no visualization).\n10. **gltf**: Loads a model in GLTF format.\n11. **test**: A simple test with rotating figures.\n\n## Configuration File Format for GraphToys Project\n\nThe configuration file for the GraphToys project uses the INI format, which is a simple, standard format for configuration files. The file is divided into sections, each marked by a header in square brackets (`[]`). Here's a breakdown of the sections and parameters you can set:\n\n### `[render]` Section\nThis section is used to configure rendering settings.\n\n- **api**: Set the graphics API to be used. You can choose between `vulkan` and `opengl`.\n   ```\n   api = vulkan\n   ```\n   or\n   ```\n   api = opengl\n   ```\n\n- **width**: Define the width of the rendering window in pixels.\n   ```\n   width = 800\n   ```\n\n- **height**: Define the height of the rendering window in pixels.\n   ```\n   height = 600\n   ```\n\n- **vsync**: Set this to `on` or `off` to enable or disable vertical synchronization.\n   ```\n   vsync = on\n   ```\n   or\n   ```\n   vsync = off\n   ```\n\n### `[model_name]` Sections\nEach model in the GraphToys project has its own dedicated section in the configuration file. The section name corresponds to the name of the model (for example, `[torus]`, `[triangle]`, etc.).\n\nIn these sections, you can specify various parameters that are unique to each model. It's recommended to refer to the source code in `models/model_name.c` for detailed information on what parameters can be set for each specific model.\n\nFor example, if you're configuring the `torus` model, you would look for parameters in the `models/torus.c` file and set them in the `[torus]` section of your configuration file.\n\n### Example Configuration File\nHere's an example of what a configuration file might look like:\n\n```\n[render]\napi = vulkan\nwidth = 1024\nheight = 768\nvsync = off\n\n[torus]\n; torus-specific settings\n\n[triangle]\n; triangle-specific settings\n\n[mandelbrot]\n; mandelbrot-specific settings\n```\n\n### Notes\n- Ensure the format and syntax are correctly followed to avoid any parsing errors.\n- Since the parameters for each model can vary significantly, it's crucial to consult the source files for the correct options and their expected values.\n\n# Screenshots\n\n![Galaxies](/screenshots/galaxies.png?raw=true)\n\n![Particles](/screenshots/particles.png?raw=true)\n\n![Mandelbrot](/screenshots/mandelbrot.png?raw=true)\n\n![Mandelbulb](/screenshots/mandelbulb.png?raw=true)\n\n![Skull](/screenshots/skull.png?raw=true)\n\n![Test](/screenshots/test.png?raw=true)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresetius%2Fgraphtoys","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fresetius%2Fgraphtoys","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresetius%2Fgraphtoys/lists"}