void FluidCubeAddVelocity(FluidCube cube, int x, int y, float amountX, float amountY) { int index = ArrayIndex(x, y); cube.Vx[index] += amountX; cube.Vy[index] += amountY; }
void FluidCubeStep(FluidCube cube) { float visc = cube.visc; float diff = cube.diff; float dt = cube.dt; float[] Vx = cube.Vx; float[] Vy = cube.Vy; float[] Vx0 = cube.Vx0; float[] Vy0 = cube.Vy0; float[] s = cube.s; float[] density = cube.density; Diffuse(1, Vx0, Vx, visc, dt); Diffuse(2, Vy0, Vy, visc, dt); Projection(Vx0, Vy0, Vx, Vy); Advect(1, Vx, Vx0, Vx0, Vy0, dt); Advect(2, Vy, Vy0, Vx0, Vy0, dt); Projection(Vx, Vy, Vx0, Vy0); Diffuse(0, s, density, diff, dt); Advect(0, density, s, Vx, Vy, dt); }
private void Start() { fluid = FluidCubeCreate(0, 0, 0.1f); rt = new RenderTexture(N, N, 1); rt.enableRandomWrite = true; rt.Create(); rend = GetComponent <Renderer>(); rend.enabled = true; texture = new Texture2D(rt.width, rt.height); rend.material.mainTexture = texture; grid = GetComponent <Grid>(); }
public FluidCube FluidCubeCreate(int diffusion, int viscosity, float dt) { FluidCube cube = new FluidCube(); cube.size = N; cube.dt = dt; cube.diff = diffusion; cube.visc = viscosity; cube.s = new float[N * N]; cube.density = new float[N * N]; cube.Vx = new float[N * N]; cube.Vy = new float[N * N]; cube.Vx0 = new float[N * N]; cube.Vy0 = new float[N * N]; return(cube); }
void FluidCubeAddDensity(FluidCube cube, int x, int y, float amount) { N = cube.size; cube.density[ArrayIndex(x, y)] += amount; }