Im-Rises / nbody-simulator-webgl

N-Body simulation made in C++ build for WebAssembly/WebGL with Emscripten (Bruteforce, Barnes-Hut, GPU)

Home Page:https://im-rises.github.io/nbody-simulator-webgl/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 πŸš€πŸš€

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

demo-video.mp4

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:
https://emscripten.org/docs/getting_started/downloads.html

You also need to have CMake and make installed. You can find instructions on how to install CMake here:
https://cmake.org/install/

Make can be installed by running this command in the terminal:

sudo apt install make

Once you have Emscripten and CMake installed run this command in the project root directory:

emcmake cmake .

Then run this command in the same directory:

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:

https://www.python.org/downloads/

Once you have Python installed, run this command in the project build directory:

python -m http.server

Then open your browser and go to this address:

http://localhost:8000/

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 CMake flawfinder cpp-linter Emscripten-CMake Emscripten-Publish

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:
https://www.glfw.org/docs/latest/

glm:
https://glm.g-truc.net/0.9.9/index.html

glad:
https://glad.dav1d.de/

Dear ImGui:
https://github.com/ocornut/imgui

OpenGL:
https://www.opengl.org/

emscripten:
https://emscripten.org/docs/getting_started/downloads.html

Documentation

learnopengl (OpenGL tutorial):
https://learnopengl.com/In-Practice/2D-Game/Particles

unrealistic.dev (Change CMake working directory):
https://unrealistic.dev/posts/setting-debug-parameters-with-cmake-tools-for-visual-studio

OpenGL ES 3.0 Reference Pages:
https://www.khronos.org/registry/OpenGL-Refpages/es3.0/

Wikipedia (OpenGL versions):
https://en.wikipedia.org/wiki/OpenGL_Shading_Language

codepen (WebGL 2 Particles):
https://codepen.io/stopyransky/pen/gBoQoO

nopjiap (WebGL 2 Particles):
https://github.com/nopjia/particles-mrt

Contributors

Quentin MOREL:

GitHub contributors

About

N-Body simulation made in C++ build for WebAssembly/WebGL with Emscripten (Bruteforce, Barnes-Hut, GPU)

https://im-rises.github.io/nbody-simulator-webgl/

License:MIT License


Languages

Language:C++ 94.4%Language:CMake 2.3%Language:GLSL 1.9%Language:Batchfile 0.8%Language:Shell 0.7%