Skip to content

Im-Rises/nbody-simulator-webgl

Repository files navigation

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.

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