예제 #1
0
    void Start()
    {
        _texPw   = new Texture2D(n, n, TextureFormat.RGBA32, false, true);
        _texEtaX = new Texture2D(n, n, TextureFormat.RGBA32, false, true);
        _texEtaY = new Texture2D(n, n, TextureFormat.RGBA32, false, true);
        _cPw     = _texPw.GetPixels();
        _cEtaX   = _texEtaX.GetPixels();
        _cEtaY   = _texEtaY.GetPixels();
        displacementMat.SetFloat("_L", L);
        floatDecoderMat.SetFloat("_L", L);
        floatDecoderMat.SetTexture("_XTex", _texEtaX);
        floatDecoderMat.SetTexture("_YTex", _texEtaY);
        floatDecoderMat.SetTexture("_ZTex", _texPw);

        _texUvw = new RenderTexture(n, n, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear);
        displacementMat.mainTexture = _texUvw;

        _k        = new K(n, L);
        _phillips = new Phillips(_k, wind.magnitude, wind.normalized);
        _h0       = new H0(_phillips);
        _w        = new W(_k);
        _h        = new H(_h0, _w);
        _eta      = new Eta(n, _k, _h);

        _fft  = new FFT(n);
        _pw   = new float[2 * n * n];
        _etaX = new float[_pw.Length];
        _etaY = new float[_pw.Length];
    }
예제 #2
0
    void Start()
    {
        _texPw = new Texture2D(n, n, TextureFormat.RGBA32, false, true);
        _texEtaX = new Texture2D(n, n, TextureFormat.RGBA32, false, true);
        _texEtaY = new Texture2D(n, n , TextureFormat.RGBA32, false, true);
        _cPw = _texPw.GetPixels();
        _cEtaX = _texEtaX.GetPixels();
        _cEtaY = _texEtaY.GetPixels();
        displacementMat.SetFloat("_L", L);
        floatDecoderMat.SetFloat("_L", L);
        floatDecoderMat.SetTexture("_XTex", _texEtaX);
        floatDecoderMat.SetTexture("_YTex", _texEtaY);
        floatDecoderMat.SetTexture("_ZTex", _texPw);

        _texUvw = new RenderTexture(n, n, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear);
        displacementMat.mainTexture = _texUvw;

        _k = new K(n, L);
        _phillips = new Phillips(_k, wind.magnitude, wind.normalized);
        _h0 = new H0(_phillips);
        _w = new W(_k);
        _h = new H(_h0, _w);
        _eta = new Eta(n, _k, _h);

        _fft = new FFT(n);
        _pw = new float[2 * n * n];
        _etaX = new float[_pw.Length];
        _etaY = new float[_pw.Length];
    }
예제 #3
0
    public H(H0 H0, W W)
    {
        this.H0 = H0;
        this.W  = W;

        N       = H0.N;
        this._h = new float[2 * N * N];
        _Jump(0f);
    }
예제 #4
0
파일: H.cs 프로젝트: nobnak/FftOceanUnity
    public H(H0 H0, W W)
    {
        this.H0 = H0;
        this.W = W;

        N = H0.N;
        this._h = new float[2 * N * N];
        _Jump(0f);
    }
예제 #5
0
    private void _Jump(float t)
    {
        _t = t;
        for (var y = 0; y < N; y++)
        {
            for (var x = 0; x < N; x++)
            {
                var theta = W[x, y] * t;
                var c     = Mathf.Cos(theta);
                var s     = Mathf.Sin(theta);
                var hp    = H0[x, y];
                var hm    = H0.ConjMinusK(x, y);

                var i = 2 * (x + y * N);
                _h[i]     = (hp.x + hm.x) * c + (hm.y - hp.y) * s;
                _h[i + 1] = (hp.y + hm.y) * c + (hp.x - hm.x) * s;
            }
        }
    }