Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/im-rises/nbody-simulator-webgl
N-Body simulation made in C++ build for WebAssembly/WebGL with Emscripten (Bruteforce, Barnes-Hut, GPU)
https://github.com/im-rises/nbody-simulator-webgl
3d-graphics cplusplus cpp emscripten engine glsl imgui opengl particles physics-simulation simulation webassembly webgl
Last synced: about 2 months ago
JSON representation
N-Body simulation made in C++ build for WebAssembly/WebGL with Emscripten (Bruteforce, Barnes-Hut, GPU)
- Host: GitHub
- URL: https://github.com/im-rises/nbody-simulator-webgl
- Owner: Im-Rises
- License: mit
- Created: 2023-05-15T19:58:40.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-09-25T00:49:01.000Z (over 1 year ago)
- Last Synced: 2024-11-06T16:50:20.689Z (3 months ago)
- Topics: 3d-graphics, cplusplus, cpp, emscripten, engine, glsl, imgui, opengl, particles, physics-simulation, simulation, webassembly, webgl
- Language: C++
- Homepage: https://im-rises.github.io/nbody-simulator-webgl/
- Size: 3.4 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# nbody-simulator-webgl
![]()
![]()
![]()
![]()
![]()
## Description
This project is an n-body simulator that uses OpenGL and ImGui to render the simulation and to change the simulation parameters.
You can choose between different types of simulation:
- CPU
- GPU
- Barnes-Hut algorithmThe different algorithm still need some work to be optimized, but they are currently working.
## 🚀🚀[you can try the webgl build online by clicking here](https://im-rises.github.io/nbody-simulator-webgl/) 🚀🚀
> **Note**
> The website work for desktop and mobile, but on mobile you won't be able to use the UI to change the simulation
> parameters.## Videos
https://github.com/Im-Rises/nbody-simulator-docker/assets/59691442/622717a8-b508-4221-a79e-f00c07475979
[//]: # (https://github.com/Im-Rises/nbody-simulator-docker/assets/59691442/59ef1c71-e2bb-4bd5-99f8-66eace4280b5)
## Dependencies
- OpenGL version: 4.6.0
- GLSL version: 4.60
- GLFW version: 3.3.8
- Glad version: 0.1.36
- ImGui version: 1.89.6 WIP
- GLM version: 0.9.8
- Emscripten: 3.1.37## Building
To build the project, you need to use a UNIX system, like Ubuntu or if you're on Windows you can use WSL.
Then you have to install Emscripten. You can find
instructions on how to install Emscripten here:You also need to have CMake and make installed. You can find instructions on how to
install CMake here:Make can be installed by running this command in the terminal:
```bash
sudo apt install make
```Once you have Emscripten and CMake installed run this command in the project root directory:
```bash
emcmake cmake .
```Then run this command in the same directory:
```bash
emmake make
```## To test the website locally
To test the website locally, you need to have Python installed. You can find instructions on how to install Python here:
Once you have Python installed, run this command in the project build directory:
```bash
python -m http.server
```Then open your browser and go to this address:
## Controls
The speed and some parameters can be modified directly in the ImGui windows.
| Action | Key |
|---------------------|----------------------------------------------------|
| Translate camera | (WASD) or (↑ ← ↓ →) |
| Pause/Resume | P |
| Move up/down camera | (Space/Shift) or (Page up/down) |
| Rotate camera | Right Mouse Button + Mouse movement |
| Fullscreen | F11 |
| Drag particles | Left Mouse Button + Mouse movement or Touch screen |
| Show/Hide UI | U |> **Note**
> The translation commands are set for QWERTY keyboard layout.## GitHub Actions
This project uses GitHub Actions to build the project and deploy it to GitHub
[![CodeQL](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/codeql.yml)
[![CMake](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/cmake.yml/badge.svg?branch=main)](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/cmake.yml)
[![flawfinder](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/flawfinder.yml/badge.svg?branch=main)](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/flawfinder.yml)
[![cpp-linter](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/cpp-linter.yml/badge.svg?branch=main)](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/cpp-linter.yml)
[![Emscripten-CMake](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/emscripten-cmake.yml/badge.svg)](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/emscripten-cmake.yml)
[![Emscripten-Publish](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/emscripten-publish.yml/badge.svg)](https://github.com/Im-Rises/nbody-simulator-webgl/actions/workflows/emscripten-publish.yml)The project is set with a set of different scripts:
- CodeQL: This script is used to check the code for security issues.
- CMake: This script is used to build the project.
- Cpp Cmake Publish: This script is used to publish the project on GitHub.
- Flawfinder: This script is used to check the code for security issues.
- Microsoft C++ Code Analysis: This script is used to check the code for security issues.
- Cpp Linter: This script is used to check the code for security issues.
- Emscripten CMake: This script is used to test build of the project using Emscripten toolchain.
- Emscripten-Publish: This script build to webgl and publish the project on GitHub Pages.## Libraries
glfw:
glm:
glad:
Dear ImGui:
OpenGL:
emscripten:
## Documentation
learnopengl (OpenGL tutorial):
unrealistic.dev (Change CMake working directory):
OpenGL ES 3.0 Reference Pages:
Wikipedia (OpenGL versions):
codepen (WebGL 2 Particles):
nopjiap (WebGL 2 Particles):
## Contributors
Quentin MOREL:
- @Im-Rises
-[![GitHub contributors](https://contrib.rocks/image?repo=Im-Rises/nbody-simulator-webgl)](https://github.com/Im-Rises/nbody-simulator-webgl/graphs/contributors)