Metaballs simulation in C++
We can think of the metaballs as organic-looking n-dimensional isosurface shapes moving in space. The most inspiring feature is their ability to meld together when in close proximity to create single, contiguous objects.
In the following article, I will shortly explain how the algorithm works and how to simulate the behavior.
The implementation of algorithm I deployed in C++ with the visualization in ImGui. The introduction to the C++ ImGui and information on how to compile and build programs you will find in one of my previous articles.
The source code you will find on my GitHub.
Isosurface
The isosurface (here in 2D space) can be considered as a space of pixels whose color depends directly on the defined function. The function can have different implementations, however in computer graphics is related to the position in the space the objects (here balls with randomly generated radius) are moving.
We can imagine that if the function of pixel color depends directly on the position on the canvas, for example,
so we can expect the following output.
The typical function chosen for metaballs is the inverse-square law, that is, the distance between initiated the ball and the particular pixel on the canvas. As we can imagine while the ball is moving the function return values depending on the current position of the ball.
Simulation
The simulation is straightforward (see the source code). for the purpose of this article, I initialized the 5 balls with random sizes, start positions, and directions. While the balls are in motion, the function affecting the color of each pixel of the space is changing. The trick here is the function affects the color model in HSV which I map to RGB. See the result below.
Thank you for reading.