Exemplo n.º 1
0
    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;
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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>();
    }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
 void FluidCubeAddDensity(FluidCube cube, int x, int y, float amount)
 {
     N = cube.size;
     cube.density[ArrayIndex(x, y)] += amount;
 }