Exemplo n.º 1
0
    void GenerateWavesSpectrum()
    {
        float[] spectrum01 = new float[m_size * m_size * 4];
        float[] spectrum23 = new float[m_size * m_size * 4];

        int     idx;
        float   i;
        float   j;
        Vector2 sample12XY;
        Vector2 sample12ZW;
        Vector2 sample34XY;
        Vector2 sample34ZW;

        Random.InitState(0);

        for (int x = 0; x < m_size; x++)
        {
            for (int y = 0; y < m_size; y++)
            {
                idx = x + y * m_size;
                i   = (x >= m_size / 2) ? (float)(x - m_size) : (float)x;
                j   = (y >= m_size / 2) ? (float)(y - m_size) : (float)y;

                sample12XY = GetSpectrumSample(i, j, m_gridSizes.x, Mathf.PI / m_gridSizes.x);
                sample12ZW = GetSpectrumSample(i, j, m_gridSizes.y, Mathf.PI * m_fsize / m_gridSizes.x);
                sample34XY = GetSpectrumSample(i, j, m_gridSizes.z, Mathf.PI * m_fsize / m_gridSizes.y);
                sample34ZW = GetSpectrumSample(i, j, m_gridSizes.w, Mathf.PI * m_fsize / m_gridSizes.z);

                spectrum01[idx * 4 + 0] = sample12XY.x;
                spectrum01[idx * 4 + 1] = sample12XY.y;
                spectrum01[idx * 4 + 2] = sample12ZW.x;
                spectrum01[idx * 4 + 3] = sample12ZW.y;

                spectrum23[idx * 4 + 0] = sample34XY.x;
                spectrum23[idx * 4 + 1] = sample34XY.y;
                spectrum23[idx * 4 + 2] = sample34ZW.x;
                spectrum23[idx * 4 + 3] = sample34ZW.y;
            }
        }

        //Write floating point data into render texture
        EncodeFloat.WriteIntoRenderTexture(m_spectrum01, 4, spectrum01);
        EncodeFloat.WriteIntoRenderTexture(m_spectrum23, 4, spectrum23);
    }
Exemplo n.º 2
0
    void CreateWTable()
    {
        //Some values need for the InitWaveSpectrum function can be precomputed
        Vector2 uv, st;
        float   k1, k2, k3, k4, w1, w2, w3, w4;

        float[] table = new float[m_size * m_size * 4];

        for (int x = 0; x < m_size; x++)
        {
            for (int y = 0; y < m_size; y++)
            {
                uv = new Vector2(x, y) / m_fsize;

                st.x = uv.x > 0.5f ? uv.x - 1.0f : uv.x;
                st.y = uv.y > 0.5f ? uv.y - 1.0f : uv.y;

                k1 = (st * m_inverseGridSizes.x).magnitude;
                k2 = (st * m_inverseGridSizes.y).magnitude;
                k3 = (st * m_inverseGridSizes.z).magnitude;
                k4 = (st * m_inverseGridSizes.w).magnitude;

                w1 = Mathf.Sqrt(9.81f * k1 * (1.0f + k1 * k1 / (WAVE_KM * WAVE_KM)));
                w2 = Mathf.Sqrt(9.81f * k2 * (1.0f + k2 * k2 / (WAVE_KM * WAVE_KM)));
                w3 = Mathf.Sqrt(9.81f * k3 * (1.0f + k3 * k3 / (WAVE_KM * WAVE_KM)));
                w4 = Mathf.Sqrt(9.81f * k4 * (1.0f + k4 * k4 / (WAVE_KM * WAVE_KM)));

                table[(x + y * m_size) * 4 + 0] = w1;
                table[(x + y * m_size) * 4 + 1] = w2;
                table[(x + y * m_size) * 4 + 2] = w3;
                table[(x + y * m_size) * 4 + 3] = w4;
            }
        }

        //Write floating point data into render texture
        EncodeFloat.WriteIntoRenderTexture(m_WTable, 4, table);
    }