Ejemplo n.º 1
0
    void InitH0AndDispersionRelation(OceanParameter parameter, ref Vector2[] h0, ref float[] omega, ref Vector2[] phillip, ref Vector2[] Gauss_Data)
    {
        Vector2 windDir = parameter.wind_dir.normalized;

        Vector2 K = Vector2.zero;

        for (int i = 0; i < parameter.displaceMap_dimension; i++)
        {
            K.y = (-parameter.displaceMap_dimension / 2.0f + i) * (2 * Mathf.PI / parameter.patch_size);

            for (int j = 0; j < parameter.displaceMap_dimension; j++)
            {
                K.x = (-parameter.displaceMap_dimension / 2.0f + j) * (2 * Mathf.PI / parameter.patch_size);

                float phillips = (K.x == 0 && K.y == 0) ? 0 : Mathf.Sqrt(Phillips(K, windDir, parameter.wind_speed, parameter.wave_amplitude * 1e-7f, parameter.wind_dependency));

                int index = i * parameter.displaceMap_dimension + j;

                float Gauss_x = Gauss(), Gauss_y = Gauss();
                h0[index].x = phillips * Gauss_x * HALF_SQRT_2;
                h0[index].y = phillips * Gauss_y * HALF_SQRT_2;

                omega[index] = Mathf.Sqrt(GRAV_ACCEL * Mathf.Sqrt(K.x * K.x + K.y * K.y));

                phillip[index].x = phillips;
                phillip[index].y = phillips;

                Gauss_Data[index].x = Gauss_x;
                Gauss_Data[index].y = Gauss_y;
            }
        }
    }
Ejemplo n.º 2
0
    void UpdateDisplacementMap(float t, OceanParameter parameter)
    {
        if (h0Buffer == null || omegaBuffer == null || HKBuffer == null || DxBuffer == null || DyBuffer == null)
        {
            return;
        }

        // H(0) -> H(t), D(x,t), D(y,t)
        UpdateSpectrumShader.SetBuffer(0, "H0", h0Buffer);
        UpdateSpectrumShader.SetBuffer(0, "Omega", omegaBuffer);
        UpdateSpectrumShader.SetBuffer(0, "HK", HKBuffer);
        UpdateSpectrumShader.SetBuffer(0, "Dx", DxBuffer);
        UpdateSpectrumShader.SetBuffer(0, "Dy", DyBuffer);
        UpdateSpectrumShader.SetInt("Dimension", parameter.displaceMap_dimension);
        UpdateSpectrumShader.SetFloat("curTime", t);
        int GroupNum = parameter.displaceMap_dimension / OceanConst.THREAD_GROUP;

        UpdateSpectrumShader.Dispatch(0, GroupNum, GroupNum, 1);

        mFFT.EvaluteFFT(HKBuffer, ref HtBuffer);
        mFFT.EvaluteFFT(DxBuffer, ref DxtBuffer);
        mFFT.EvaluteFFT(DyBuffer, ref DytBuffer);
    }