Version: 0.975 Raw
Author: SL1dee36
This program simulates a 2D fluid using the Smoothed Particle Hydrodynamics (SPH) method. It allows users to interact with the fluid by creating new particles and manipulating existing ones.
Currect verison demo: https://www.youtube.com/watch?v=xbR4eWPZM4s
Old verison demo: https://github.com/user-attachments/assets/170b9447-a075-4b4f-9c04-e5bc13744b59
- Realistic fluid behavior: Simulates fluid movement, pressure, viscosity, and interaction with boundaries.
- Interactive controls:
- Left Mouse Button: Creates new particles at the cursor position.
- Right Mouse Button: Drags and interacts with particles within a radius.
- 'S' Key: Resets the velocity of all particles.
- Obstacle interaction: Includes a circular obstacle that particles can collide with.
- Visual representation: Renders particles with a color gradient based on their speed.
- Performance optimizations: Implements efficient neighbor search and force calculation algorithms.
- SDL2: Simple DirectMedia Layer 2 library for graphics rendering and input handling.
- Install SDL2: Instructions for installing SDL2 can be found on the official website: https://www.libsdl.org/download-2.0.php
- Compile the code: Use a C++ compiler that supports SDL2 (e.g., g++):
g++ -o fluid_simulation fluid_simulation.cpp -lSDL2
- Run the executable:
./fluid_simulation
The simulation parameters can be adjusted by modifying the constants at the beginning of the code:
WIDTH
andHEIGHT
: Dimensions of the simulation window.FPS
: Frames per second.PARTICLE_RADIUS
: Radius of each particle.GRAVITY
: Strength of the gravitational force.REST_DENSITY
: Rest density of the fluid.GAS_CONSTANT
: Gas constant used in pressure calculation.VISCOSITY
: Viscosity of the fluid.PARTICLE_CREATION_RATE
: Number of particles created per frame when the left mouse button is held down.COHESION_STRENGTH
: Strength of the cohesion force between particles.DAMPING
: Damping factor applied to particle velocities.DRAG_COEFFICIENT
: Drag coefficient applied to grabbed particles.GRAB_RADIUS
: Radius within which particles are affected by the right mouse button.SPRING_CONSTANT
: Spring constant used in the spring force calculation.OBSTACLE_X
andOBSTACLE_Y
: Position of the circular obstacle.OBSTACLE_RADIUS
: Radius of the circular obstacle.WALL_THICKNESS
: Thickness of the walls (currently set to 0 for optimized rendering).WALL_COLOR
: Color of the walls.PAD_X
andPAD_Y
: Padding between the walls and the simulation area.GRADIENT_STEPS
: Number of steps in the color gradient.max_speed
: Maximum speed for color mapping.
- Performance may degrade with a large number of particles.
- The simulation is not perfectly accurate and may exhibit some unrealistic behavior in certain scenarios.
- Implement more advanced SPH features, such as surface tension and boundary handling.
- Optimize performance further to handle more particles.
- Add more interactive features and customization options.
This project is released under the MIT License. See the LICENSE file for details.