Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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)

Awesome Lists containing this project

README

        

# nbody-simulator-webgl


cppLogo
openglLogo
cmakeLogo
webglLogo
glfwLogo

## 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 algorithm

The 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)