示例#1
0
    public override void setup()
    {
        invWidth     = 1.0f / P5Setting.SCREEN_W;
        invHeight    = 1.0f / P5Setting.SCREEN_H;
        aspectRatio  = width * invHeight;
        aspectRatio2 = aspectRatio * aspectRatio;


        // create fluid and set options
        fluidSolver = new MSAFluidSolver2D((int)(FLUID_WIDTH), (int)(FLUID_WIDTH * height / width));

        fluidSolver.enableRGB(true).setFadeSpeed(0.003f).setDeltaT(0.5f).setVisc(0.0001f);
        fluidSolver.enableBoundary = enableBoundary;

        // create image to hold fluid picture
        imgFluid           = createImage(fluidSolver.getWidth(), fluidSolver.getHeight(), PImangeFormat.RGB);
        pImageRender.image = imgFluid;

        // create particle system
        if (p5particleSystem == null)
        {
            p5particleSystem = this.gameObject.AddComponent <P5ParticleSystem> ();
        }
        p5particleSystem.Init(fluidSolver);
    }
示例#2
0
    public void Init(MSAFluidSolver2D fluidSolver)
    {
        allParticles = maxParticles + maxStayParticles;
        p5particles  = new P5Particle[allParticles];

        curIndex = 0;

        for (int i = 0; i < maxParticles; i++)
        {
            p5particles [i]             = new P5Particle();
            p5particles [i].fluidSolver = fluidSolver;
            p5particles [i].isSpark     = true;
        }

        // stay particle
        for (int i = maxParticles; i < allParticles; i++)
        {
            p5particles [i]             = new P5Particle();
            p5particles [i].fluidSolver = fluidSolver;
            p5particles [i].isSpark     = true;

            /*
             * p5particles[i].isStay = true;
             * float x = Random.Range(0, Setting.SCREEN_W);
             * float y = Random.Range(0, Setting.SCREEN_H);
             * Color color = stayColor;
             * //Color color = Color.cyan;
             * p5particles[i].init(x, y, color);
             * float t_alpha = Random.Range(0.4f, 0.9f);
             * //p5particles[i].mass = 0.4f;
             * p5particles[i].mass = Random.Range(0.4f, 0.9f);
             * p5particles[i].StartAppearAnime(t_alpha);
             */
        }

        p5ParticleRenderer.Init(p5particles);
    }
    void Start()
    {
        // duplicate the original texture and assign to the material
        invWidth = 1.0f/WIDTH;
        invHeight = 1.0f/HEIGHT;
        aspectRatio = WIDTH * invHeight;
        aspectRatio2 = aspectRatio * aspectRatio;

        fluidSolver = new MSAFluidSolver2D(128,128);
        fluidSolver.enableRGB(true).setFadeSpeed(0.003f).setDeltaT(0.5f).setVisc(0.0001f);
        //Debug.Log(fluidSolver.getWidth()+":::"+ fluidSolver.getHeight());

        texture = new Texture2D(fluidSolver.getWidth(),fluidSolver.getHeight());
        renderer.material.mainTexture = texture;

        sourceTexture = (Texture2D)Resources.Load("otoko130");//WH128+2=130
        Color[] cols = sourceTexture.GetPixels();//130*130

        for(var i = 0; i < fluidSolver.getNumCells(); i++){
            fluidSolver.rOld[i]  = cols[i].r;
            fluidSolver.gOld[i]  = cols[i].g;
            fluidSolver.bOld[i]  = cols[i].b;
        }
    }