Beispiel #1
0
    public void Awake()
    {
        CellSpace                    = (SimDomain.width + SimDomain.height) / 32.0f;
        particleMass                 = (CellSpace * 20.0f);
        m_gravity                    = new Vector3(0.0f, -9.81f, 0.0f) * particleMass;
        m_fluidSim                   = new SPHSimulation(CellSpace, SimDomain);
        m_collisionSolver            = new CollisionResolver();
        m_collisionSolver.Bounciness = 0.2f;
        m_collisionSolver.Friction   = 0.01f;

        m_particleSystem = new ParticleSystem();
        float freq    = 40;
        int   maxPart = 100;

        m_particleSystem.MaxParticles = maxPart;
        m_particleSystem.MaxLife      = (int)((double)maxPart / freq / 0.01f);

        FluidParticleEmitter emitter = new FluidParticleEmitter();

        emitter.Position     = new Vector3(SimDomain.xMax / 2, SimDomain.yMax - SimDomain.yMax / 8, 0.0f);
        emitter.VelocityMin  = 2.5f;
        emitter.VelocityMax  = 3.0f;
        emitter.Direction    = new Vector3(0.8f, -0.25f, 0.0f);
        emitter.Distribution = SimDomain.width * 0.1f;
        emitter.Frequency    = freq;
        emitter.ParticleMass = particleMass;
        m_particleSystem.Emitters.Add(emitter);
    }
Beispiel #2
0
    //size of a particle buffer



    public void Awake()
    {
        // Init simulation
        lGravity                   = Constants.Gravity * Constants.ParticleMass;
        fluidSim                   = new SPHSimulation(Constants.CellSpace, Constants.SimulationDomain);
        collisionSolver            = new CollisionSolver();
        collisionSolver.Bounciness = 0.2f;
        collisionSolver.Friction   = 0.01f;

        // Init. particle system
        particleSystem = new ParticleSystem();
        float freq    = 40;
        int   maxPart = 100;

        particleSystem.MaxParticles = maxPart;
        particleSystem.MaxLife      = (int)((double)maxPart / freq / Constants.TimeStepSeconds);

        // Add Emitter
        ParticleEmitter emitter = new ParticleEmitter();

        emitter.Position     = new Vector2(Constants.SimulationDomain.xMax / 2, Constants.SimulationDomain.yMax - Constants.SimulationDomain.yMax / 8);
        emitter.VelocityMin  = 2.5f; //Constants.ParticleMass * 0.30f;
        emitter.VelocityMax  = 3.0f; //Constants.ParticleMass * 0.35f;
        emitter.Direction    = new Vector2(0.8f, -0.25f);
        emitter.Distribution = Constants.SimulationDomain.width * 0.1f;
        emitter.Frequency    = freq;
        emitter.ParticleMass = Constants.ParticleMass;
        particleSystem.Emitters.Add(emitter);

        print(
            "SimulationDomain: (" + Constants.SimulationDomain.width + "," + Constants.SimulationDomain.height + ")" +
            " Grid: " + fluidSim.m_grid.Count + " (" + fluidSim.m_grid.Width + "," + fluidSim.m_grid.Height + ")" +
            " CellSpace: " + Constants.CellSpace + " "
            );
        particles = new UnityEngine.ParticleSystem.Particle[Constants.MAX_PARTICLES];
        filter    = renderer.GetComponent <MeshFilter>();
    }