Exemplo n.º 1
0
        void UpdateBatch(int lodIdx, int firstComponent, int numComponents)
        {
            int numInBatch = 0;

            // register any nonzero components
            for (int i = 0; i < numComponents; i++)
            {
                float wl     = _wavelengths[firstComponent + i];
                float pow    = _spectrum.GetPower(wl);
                float period = wl / ComputeWaveSpeed(wl);
                float amp    = Mathf.Sqrt(pow / period);

                if (amp >= 0.001f)
                {
                    _wavelengthsBatch[numInBatch] = wl;
                    _ampsBatch[numInBatch]        = amp;
                    _anglesBatch[numInBatch]      = Mathf.Deg2Rad * (_windDirectionAngle + _angleDegs[firstComponent + i]);
                    _phasesBatch[numInBatch]      = _phases[firstComponent + i];
                    numInBatch++;
                }
            }

            if (numInBatch == 0)
            {
                // no waves to draw - abort
                _renderers[lodIdx].enabled = false;
                return;
            }

            // if we didnt fill the batch, put a terminator signal after the last position
            if (numInBatch < BATCH_SIZE)
            {
                _wavelengthsBatch[numInBatch] = 0f;
            }

            // apply the data to the shape material
            _renderers[lodIdx].enabled = true;
            _materials[lodIdx].SetFloatArray("_Wavelengths", _wavelengthsBatch);
            _materials[lodIdx].SetFloatArray("_Amplitudes", _ampsBatch);
            _materials[lodIdx].SetFloatArray("_Angles", _anglesBatch);
            _materials[lodIdx].SetFloatArray("_Phases", _phasesBatch);
            _materials[lodIdx].SetFloat("_NumInBatch", numInBatch);
        }
Exemplo n.º 2
0
        void UpdateMaterials()
        {
            for (int i = 0; i < _wavelengths.Length; i++)
            {
                // Wavelength
                _materials[i].SetFloat("_Wavelength", _wavelengths[i]);

                // Amplitude
                float pow    = _spectrum.GetPower(_wavelengths[i]);
                float period = _wavelengths[i] / ComputeWaveSpeed(_wavelengths[i]);
                _amplitudes[i] = Mathf.Sqrt(pow / period);
                _materials[i].SetFloat("_Amplitude", _amplitudes[i]);

                // Direction
                _materials[i].SetFloat("_Angle", Mathf.Deg2Rad * (_windDirectionAngle + _angleDegs[i]));

                // Phase
                _materials[i].SetFloat("_Phase", _phases[i]);
            }
        }